Java Server Faces等同于Html.ActionLink

时间:2014-09-07 19:26:37

标签: asp.net-mvc jsf netbeans html.actionlink

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

文件夹结构如下所示:

Web Tree Structure

我知道动作标签不正确,但有没有办法改变它以获得所需的结果?

2 个答案:

答案 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>