【发布时间】:2011-04-08 16:10:10
【问题描述】:
我在 jsf 2 中提交表单有一点问题:
在我的 web 应用程序中,我有一个函数可以更新我的数据库中的实体。此函数从托管 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 中的调试模式不再起作用,它一直忽略我的断点。我会解决这个问题,然后我会检查实例。对不起-.-
【问题讨论】:
-
那么您的 JSF 页面是什么样子的?什么应该调用这些函数?
-
你能打开你的 projectData bean 和 projectDTO 属性的代码吗?
-
您是否尝试调试它以查看数据是否传递给托管 bean?并检查它是否是同一个实例? (见 BalusC 答案)。
-
如果无法调试,至少尝试“可怜的人调试”,通过 System.out.println() 将状态打印到控制台。检查您的数据是否已传递给 Controller,在收到的 projectData 上使用 System.out.println()。