【发布时间】:2013-02-20 12:47:49
【问题描述】:
我正在使用 JSF 2.0 和 Primefaces 3.4.2
我有两个p:selectOneMenu,第一个是父级,第二个是子级,基于父级值,子组件被填充。
家长p:selectOneMenu
<p:selectOneMenu id="empl" value="#{empMB.employee}">
<f:selectItems value="#{empMB.employeeList}" var="emp"
itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeNumber}"/>
<p:ajax update="department" />
</p:selectOneMenu>
孩子p:selectOneMenu
<p:selectOneMenu id="department" value="#{deptMB.department}">
<f:selectItems value="#{deptMB.loadDepartments(<??>)}" var="dept"
itemLabel="#{dept.departmentName}" itemValue="#{dept.departmentCode}"/>
</p:selectOneMenu>
我在部门 ManagedBean 中有一个名为 loadDepartments 的方法,带有一个参数
public void loadDepartments(String employeeNumber)
如何将值传递给子组件中的 loadDepartments,以便它根据父组件中选择的代码加载所有部门?
如果我替换 #{deptMB.loadDepartments(empMB.employee.employeeCode)} 我会得到
Error Parsing: #{deptMB.loadDepartments({empMB.employee.employeeCode})}
任何帮助都非常可观?
【问题讨论】:
-
该错误表明您正在嵌入 EL(在另一个“{}”中包含“{}”)。 EL 将处理 "#{}" 中的所有内容,因此您不需要额外的大括号。除此之外,您正在尝试的不是一个好的设计。安德烈的答案是更好的方法。预填充一个支持 bean 列表并将其绑定到
<f:selectItems/> -
在您的
empMB中,而不是private Employee employee,使用private String employeeNumber并将其用作您的第一个selectOneMenu的值。然后你可以做<f:selectItems value="#{deptMB.loadDepartments(empMB.employeeNumber)}" />
标签: java jsf jsf-2 primefaces