繁体   English   中英

primefaces级联选择菜单

[英]primefaces cascade selectonemenu

我有3个下拉菜单,第二个必须根据第一个的选定选项进行加载。 第三项基于第二项的选定选项。 这是页面:

<h:panelGrid columns="2" cellpadding="5">
    <p:outputLabel value="Empresa:" for="selectCompany" />
    <p:selectOneMenu id="selectCompany" value="#{dropdownBean.company}"
        converter="entityConverter" effect="fade" effectSpeed="200"
        var="company">

        <p:ajax process="@this" event="change"
            update="selectBranch, selectVendor" />

        <f:selectItems value="#{dropdownBean.companies}" var="companyItem"
            itemLabel="#{companyItem.corporateName}" itemValue="#{companyItem}" />
        <p:column>
            <h:outputText value="#{company.corporateName}" />
        </p:column>
    </p:selectOneMenu>
</h:panelGrid>

<h:panelGrid columns="2" cellpadding="5">
    <p:outputLabel value="Surcursal:" for="#selectBranch" />
    <p:selectOneMenu id="#selectBranch" value="#{dropdownBean.branch}"
        converter="entityConverter" effect="fade" effectSpeed="200"
        var="branch">

    <p:ajax process="@this" event="change" update="#selectVendor" />

        <f:selectItem itemLabel="SELECCIONE SUCURSAL" itemValue=""
            noSelectionOption="true" />
        <f:selectItems value="#{dropdownBean.branches}" var="branchItem"
            itemLabel="#{branchItem.branchName}" itemValue="#{branchItem}" />
        <p:column>
            <h:outputText value="#{branch.branchName}" />
        </p:column>
    </p:selectOneMenu>
</h:panelGrid>
<h:panelGrid columns="2" cellpadding="5">
    <p:outputLabel value="Vendedor: " for="#selectVendor" />
    <p:selectOneMenu id="#selectVendor" value="#{dropdownBean.vendor}"
        converter="entityConverter" effect="fade" effectSpeed="200"
        var="vendor">
        <f:selectItem itemLabel="SELECCIONE VENDEDOR" itemValue=""
            noSelectionOption="true" />
        <f:selectItems value="#{dropdownBean.vendors}" var="vendorItem"
            itemLabel="#{vendorItem.vendorName}" itemValue="#{vendorItem}" />
        <p:column>
            <h:outputText value="#{vendor.vendorName}" />
        </p:column>
    </p:selectOneMenu>
</h:panelGrid>

和backbean:

@ManagedBean
public class DropdownBean {
@Inject
private CompanyBC companyBC;
@Inject
private BranchBC branchBC;
@Inject
private VendorBC vendorBC;

private V_Companies company;
private V_Branches branch;
private V_Vendors vendor;

private List<V_Companies> companies;
private List<V_Branches> branches;
private List<V_Vendors> vendors;

@PostConstruct
public void allCompanies() {
    companies = companyBC.allCompanies();
}

public List<V_Companies> getCompanies() {
    return companies;
}

public void setCompanies(List<V_Companies> companies) {
    this.companies = companies;
}

public List<V_Branches> getBranches() {
    if(company!=null)
        branches = branchBC.allCompanyBranches(company.getCompanyId());
    return branches;
}

public void setBranches(List<V_Branches> branches) {
    this.branches = branches;
}

public List<V_Vendors> getVendors() {
    if(company!=null && branch!=null)
        vendors = vendorBC.allBranchVendors(company.getCompanyId(), branch.getBranchId());
    return vendors;
}

public void setVendors(List<V_Vendors> vendors) {
    this.vendors = vendors;
}

public V_Companies getCompany() {
    return company;
}

public void setCompany(V_Companies company) {
    this.company = company;
}

public V_Branches getBranch() {
    return branch;
}

public void setBranch(V_Branches branch) {
    this.branch = branch;
}

public V_Vendors getVendor() {
    return vendor;
}

public void setVendor(V_Vendors vendor) {
    this.vendor = vendor;
}

}

前两个下拉菜单的效果很好,但最后一个下拉列表的效果不佳。 对于同一事件或类似事件,显然不能超过一个p:ajax。 有什么建议吗?

添加一个监听器的工作原理:

 <p:ajax process="@this" listener="#{userEditMB.onBranchChange}" event="change" update="selectVendor" />


public void onBranchChange(AjaxBehaviorEvent event) {

    setBranch((V_Branches) ((UIOutput) event.getSource()).getValue());

    vendors = vendorBC.allBranchVendors(getBranch().getCompanyId(),
            getBranch().getBranchId());
}

我之前尝试过侦听器,但将Id作为参数传递。 传递AjaxBehaviorEvent并强制转换为对象是我的答案。 希望对大家有所帮助,谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM