我在Java EE中使用NetBeans作为Web应用程序。
我有一个控制器用于缺勤实体类(absenceController)和一个控制器用于雇员实体类(employeeController)。
我可以通过由nobodyController控制的任何页面进入员工创建页面:
<h:commandLink action="#{absenceController.prepareCreate}"
value="#{bundle.ListAbsenceCreateLink}"/>
我可以通过employeeController控制的任何页面进入缺席创建页面:
<h:commandLink action="#{employeeController.prepareCreate}"
value="#{bundle.ViewEmployeeCreateLink}" />
当我想设置一个新的缺席实例时,我需要事先设置员工,所以我试图从员工视图页面(称为Tasks.xhtml)到达缺勤创建页面,将员工实例发送为一个参数。
在MVC .NET中,我会使用Html.ActionLink,如下所示:
Html.ActionLink("Report Absence for employee"
, "Create"
, "Absence"
, new { employeeid = employee.Id } // <- I would only be able to send the id
, null)
在Java中,这是我最接近的:
<h:commandLink action="/absence/create"
value="#{bundle.TasksEmployeeCreateAbsenceLink}" >
<f:setPropertyActionListener target="#{absenceController.selected.employee}"
value="#{employeeController.selected}" />
</h:commandLink>
文件夹结构如下所示:
我知道动作标签不正确,但有没有办法改变它以获得所需的结果?
答案 0 :(得分:0)
实现我需要的一种方法是使用导航规则。 (如评论中所述,自JSF 2.x以来有更好的方法实现这一目标)
我将以下内容添加到faces-config.xml(<application></application>
部分内):
<navigation-rule>
<from-view-id>/employee/Tasks.xhtml</from-view-id>
<navigation-case>
<from-action>absence/create</from-action>
<from-outcome>absence/create</from-outcome>
<to-view-id>/absence/Create.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
答案 1 :(得分:0)
我正在使用JSF 2.2,所以我需要做的就是在Create
中使用正确的案例:
<h:commandLink action="/absence/Create"
value="#{bundle.TasksEmployeeCreateAbsenceLink}" >
<f:setPropertyActionListener target="#{absenceController.selected.employee}"
value="#{employeeController.selected}" />
</h:commandLink>