当前位置: 首页 > 知识库问答 >
问题:

Primeface级联selectonemenu

周滨海
2023-03-14

我有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。有什么建议吗?


共有1个答案

穆招
2023-03-14

添加侦听器工作:

 <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并将其转换为对象就是答案。我希望能帮助别人谢谢!

 类似资料:
  • 问题在于“p:ajax event=“rowDblselect”listener=“#{companyBean.update()}”,当我第一次双击时,方法“update()”被调用了一次(完美!),但在那之后,当我按下命令按钮“button1”并再次双击组件时,“update()”被调用了2次。当我再重复一次时,“update()”被调用了3次。。。这太奇怪了!!我认为,当我用commandBu

  • 映射器支持可配置的概念 cascade 行为对 relationship() 构造。这是指相对于特定对象在“父”对象上执行的操作 Session 应传播到该关系引用的项(例如“子”对象),并受 relationship.cascade 选择权。 层叠的默认行为仅限于所谓的层叠 保存更新 和 合并 设置。级联的典型“可选”设置是添加 删除 和 删除孤儿 选项;这些设置适用于相关对象,这些对象仅在附加

  • 中间件函数是可以在应用程序的请求 - 响应周期中访问context object和下一个中间件函数的函数。 这些函数用于修改任务的请求和响应对象,例如解析请求主体,添加响应头等。Koa更进一步,产生'downstream' ,然后将控制回流'upstream' 。 此效果称为cascading 。 以下是一个中间件功能的简单示例。 var koa = require('koa'); var app

  • 我没有那么多的冬眠。所以,当反转和级联进入画面时,陷入一个点。我知道,inverse告诉hibernate拥有实体,该实体负责更新它们的关系,Cascade会告诉hibernate首先保存实体,然后保存其从属实体。 我只是想知道是否必须在同一个实体中声明级联="all"和反转="true"。我们可以通过其他实体中的反转和级联属性将一个声明为拥有实体吗?请说明这一点? 谢谢。

  • 我想从short_name(国家名称)、name(州表)或region_name的任何可用数据中选择post_id。对region_name而不是short_name(国家名称),name(州表)执行以下查询,结果为真。 请告诉我,我哪里弄错了!

  • 我正在使用Primeface 3.4.2。 我的JSF页面中有以下内容 在ManagedBean中 问题是没有触发valueChangeListener,即没有调用handleChange方法。我尝试了以下方法,但也不起作用。 单独的JSF页面: