Primefaces ajax事件更改不会调用侦听器

Mr.*_*las 2 jsf primefaces jsf-2

好吧,我在我的ManagedBean中有一个方法可以重新加载我的bean.这是我的XHTML代码:

<h:outputText value="Contrato: *" styleClass="bold" />
                        <p:selectOneMenu converter="entityConverter"
                            disabled="#{layoutExportacaoMB.bean.id != null}"
                            value="#{layoutExportacaoMB.contratoSelecionado}"
                            effect="fade" required="true" filter="true" filterMatchMode="contains"
                            requiredMessage="O Contrato é obrigatório">
                            <f:selectItem itemLabel="Selecione um Contrato" itemValue="" />
                            <f:selectItems value="#{layoutExportacaoMB.contratos}"
                                var="contrato"
                                itemLabel="#{contrato.numeroContratoFormatadoECliente}"
                                itemValue="#{contrato}" />
                            <p:ajax event="change" update="produtos" listener="#{layoutExportacaoMB.carregarProdutosContrato}" />
                        </p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

当用户更改此项时,必须调用以下方法,但这不会发生.我知道ajax事件更改被触发,因为我的组件"produtos"已更新.

在ManagedBean上查看我的方法:

public void carregarProdutosContrato(){
    logger.info("Carregando contrato "+contratoSelecionado.getNumeroContratoFormatado());
    contratoSelecionado = (Contrato) getBoPadrao().findByNamedQuery(Contrato.FIND_COM_PRODUTOS_BY_ID, 
        new NamedParams("id", contratoSelecionado.getId()));
    }
Run Code Online (Sandbox Code Playgroud)

解:

我认为解决方案更容易,最后只使用带有"()"的监听器,看看:

                    <p:ajax event="change" update="produtos" listener="#{layoutExportacaoMB.carregarProdutosContrato()}" />
Run Code Online (Sandbox Code Playgroud)

为我工作.

Mr.*_*mes 6

尝试以下:):

  1. 确保你<p:selectOneMenu>在里面<h:form>.
  2. 添加process="@this"属性到您的<p:ajax>.
  3. 添加<p:growl>globalOnly="false"autoUpdate="true"可以帮助你找出任何验证和转换错误.

  • 我不知道在14年是怎么回事,但是使用primefaces版本5.3`process`的默认值是`@ this`,你不需要设置它. (2认同)