2010-09-06 92 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