2010-09-06 133 views
0

我有一個關於形式在JSF 2提交一個小問題:JSF2數據綁定問題

在我的webapp我,在我的數據庫更新實體的功能。該函數從託管bean中獲取相關數據。

所以,我的問題是,我的觀點的變化不傳遞給managedBean。爲了讓你清楚,這裏舉一個例子:

public String updateProject() { 
    projectService.updateProject(projectData.getProjectDTO()); 
    return ("overview.xhtml"); 
} 

prjectData是我的ManagedBean。這一個不行!沒有更新。

public String deleteProject() { 
    projectData.getProjectDTO().setDeleted(true); 
    projectService.updateProject(projectData.getProjectDTO()); 
    return ("overview.xhtml"); 
} 

在這裏,當我通過代碼改變一個值它的工作原理!所以我想我的值不在視圖中傳遞給我的managedBean。

哪裏可能出錯?是否可能需要調用一個操作來使數據通過我的視圖到managedBean?


答到的Gabor的評論:

我的頁面看起來像:

<h:form> 
<h:commandLink action="#{controller.updateProject}" value="Edit" /> 
<h:outputLabel for="title" value="Titel" /> 
<h:inputText id="title" value="#{projectData.projectDTO.title}" /> 
</h:form> 

如果我改變此標題,並按下更新什麼都不會發生;-)


我的控制器看起來像:

@ManagedBean 
@RequestScoped 
public class Controller { 

    @ManagedProperty(value = "#{projectData}") 
    private ProjectData projectData; 
... 

由於未知原因,我在eclipse中的調試模式不再工作了,它始終忽略我的斷點。我會解決這個問題,然後我會檢查一下實例。 Sry -.-

+0

那麼你的JSF頁面是怎樣的呢?什麼應該叫這些功能? – egbokul 2010-09-06 10:07:48

+0

您是否可以爲projectData bean和projectDTO屬性打開代碼,如何定義它。 – 2010-09-06 11:34:20

+0

您是否嘗試調試它以查看數據是否傳遞到託管bean?並檢查它是否是相同的實例? (請參閱BalusC答案)。 – amorfis 2010-09-06 12:09:29

回答

0

projectDataprojectDTO不是您所期望的正確實例。這是一個完全不同的例子。你不急於重新創建/重寫bean嗎?你不在範圍內有多個bean嗎?它不應該例如是#{controller.projectData.projectDTO.title}controller中的projectData實例是否應該成爲託管屬性?

0

您的projectData bean也是RequestScoped?嘗試更改爲ViewScoped。 RequestScoped bean是爲每個請求重新創建的,也是ajax請求。 projectService的範圍是什麼?

+0

projectData是SessionScoped,projectService不是managedBean,因此其生命週期由控制器處理 – Sven 2010-09-07 06:18:07