2014-09-02 2 views
1

나는 3 개의 드롭 다운이 있으며, 두 번째는 첫 번째의 선택된 옵션에 따라로드되어야합니다. 세 번째 옵션은 두 번째 옵션을 기반으로합니다. 이 페이지입니다 :primefaces cascade selectonemenu

<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 : 아약스 일 수는 없습니다. 어떤 제안을 해주시겠습니까? 리스너를 추가

답변

1

근무 :

<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()); 
} 

내가 전에 리스너를 시도했지만 매개 변수로 아이디의를 전달합니다. AjaxBehaviorEvent를 전달하고 객체에 캐스팅하는 것이 나를위한 해답이었습니다. 나는 누군가를 돕기를 바란다 고마워!

관련 문제