Java 从属p:SelectOne菜单值填充
我正在使用JSF2.0和Primefaces 3.4.2 我有两个Java 从属p:SelectOne菜单值填充,java,jsf,jsf-2,primefaces,Java,Jsf,Jsf 2,Primefaces,我正在使用JSF2.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}" ite
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 id="department" value="#{deptMB.department}">
<f:selectItems value="#{deptMB.loadDepartments(<??>)}" var="dept"
itemLabel="#{dept.departmentName}" itemValue="#{dept.departmentCode}"/>
</p:selectOneMenu>
我在department ManagedBean中有一个名为loadDepartments的方法,只有一个参数
public void loadDepartments(String employeeNumber)
如何将值传递给子组件中的loadDepartments,以便它根据在父组件中选择的代码加载所有部门
如果我替换#{deptMB.loadDepartments(empMB.employee.employeeCode)}
我得到
Error Parsing: #{deptMB.loadDepartments({empMB.employee.employeeCode})}
任何帮助都是非常值得的?我会这样做:
<p:selectOneMenu id="empl" value="#{empMB.employee}" converter="#{employeeConverter}">
<f:selectItems value="#{empMB.employeeList}" var="emp" itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeNumber}"/>
<p:ajax update="department" listener="#{empMB.onEmployeeSelect}" process="@this"/>
</p:selectOneMenu>
<p:selectOneMenu id="department" value="#{deptMB.department}" converter="#{departmentConverter}">
<f:selectItems value="#{empMB.departmentList}" var="dept" itemLabel="#{dept.departmentName}" itemValue="#{dept.departmentCode}"/>
</p:selectOneMenu>
我会这样做:
<p:selectOneMenu id="empl" value="#{empMB.employee}" converter="#{employeeConverter}">
<f:selectItems value="#{empMB.employeeList}" var="emp" itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeNumber}"/>
<p:ajax update="department" listener="#{empMB.onEmployeeSelect}" process="@this"/>
</p:selectOneMenu>
<p:selectOneMenu id="department" value="#{deptMB.department}" converter="#{departmentConverter}">
<f:selectItems value="#{empMB.departmentList}" var="dept" itemLabel="#{dept.departmentName}" itemValue="#{dept.departmentCode}"/>
</p:selectOneMenu>
该错误表示您正在嵌入EL(在另一个“{}”中嵌入“{}”)。EL将处理“#{}”中的所有内容,因此不需要额外的大括号。除此之外,你正在尝试的不是一个好的设计。安德烈的答案是更好的方法。预填充支持bean列表并将其绑定到
empMB
中的
,而不是private Employee Employee
,使用private String employeeNumber
并将其用作第一个selectOneMenu
的值。然后您可以执行
错误指示您正在嵌入EL(在另一个“{}”中包含“{}”)。EL将处理“#{}”中的所有内容,因此不需要额外的大括号。除此之外,你正在尝试的不是一个好的设计。安德烈的答案是更好的方法。预填充支持bean列表并将其绑定到empMB
中的
,而不是private Employee Employee
,使用private String employeeNumber
并将其用作第一个selectOneMenu
的值。然后你可以做
,我觉得这很简单,不需要它,特别是考虑到提问者的声誉,他似乎是一个知识渊博的人。但你说得有道理。我会编辑一下答案。@Andre如果你能提供一些片段,我将不胜感激。@Polppan完成了。。。以此为起点,如果您需要进一步了解,请告诉我help@Andre在我开始之前,我需要一个转换器类吗?@Polppan是的,你需要。我没有把它添加到代码中,因为你的问题没有。我的错。你也需要帮助吗?我想这很简单,不需要它,特别是考虑到提问者的声誉,他似乎是一个知识渊博的人。但你说得有道理。我会编辑一下答案。@Andre如果你能提供一些片段,我将不胜感激。@Polppan完成了。。。以此为起点,如果您需要进一步了解,请告诉我help@Andre在我开始之前,我需要一个转换器类吗?@Polppan是的,你需要。我没有把它添加到代码中,因为你的问题没有。我的错。你也需要帮忙吗?
@Component("employeeConverter")
public class EmployeeConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
//TODO: implement this
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
//TODO: implement this
}
}