JSF2数据绑定问题

时间:2010-09-06 08:13:37

标签: java jsf jsf-2

关于在jsf 2中提交表单,我有一点问题:

在我的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 -.-

2 个答案:

答案 0 :(得分:0)

projectDataprojectDTO不是您预期的正确实例。这是一个完全不同的实例。你不是急切地重新创建/覆盖豆子吗?你在范围内没有多个bean吗?它不应该是#{controller.projectData.projectDTO.title}吗? projectData中的controller实例不应该是托管属性吗?

答案 1 :(得分:0)

您的projectData bean也是RequestScoped吗?尝试更改为ViewScoped。为每个请求重新创建RequestScoped bean,也为ajax请求重新创建。什么是projectService的范围?