我有一个显示员工数据的h:datatable。 我希望用户在单击员工姓名时导航到新页面,该URL看起来像
employees?id=<some id>
我试图将JSP EL与JSF EL结合起来,但没有出路。
答案 0 :(得分:2)
我能想到两种可能的解决方案:
如果可以切换到Java EE 6服务器,我强烈建议使用选项编号1。
修改:在JSF 2中添加了2个标记:<h:link />
和<h:button />
。这些使用GET而不是POST。另外,请查看<f:viewparam />
。除此之外,JSF 2中还有许多其他精彩内容。有关简要概述,请参阅this article。
答案 1 :(得分:2)
如果您还没有使用JSF 2.0,那么您可以将h:outputLink
与<f:param>
,#{param}
和faces-config.xml
结合使用。
基本表示例:
<h:dataTable value="#{bean.employees}" var="employee">
<h:column>
<h:outputLink value="employees.jsf">
<f:param name="id" value="#{employee.id}" />
<h:outputText value="View employee #{employee.name}" />
</h:outputLink>
</h:column>
</h:dataTable>
基本faces-config.xml
示例:
<managed-bean>
<managed-bean-name>employeeManager</managed-bean-name>
<managed-bean-class>com.example.EmployeeManager</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>id</property-name>
<value>#{param.id}</value>
</managed-property>
</managed-bean>
基本com.example.EmployeeManager
示例:
public class EmployeeManager {
private Long id;
private Employee employee;
@PostConstruct
public void init() {
this.employee = employeeDAO.find(this.id);
}
}
{/ 1}}注释方法将在 bean构造之后调用以及所有注入和托管属性设置。另请参阅this article了解更多信息和示例。