【发布时间】:2014-05-08 16:34:35
【问题描述】:
嗯,我的 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>
当用户更改此项目时,必须调用下面的方法,但这不会发生。我知道 ajax 事件更改被触发,因为我的组件“产品”已更新。
在 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()));
}
解决方案:
解决方案比我想的更简单,只需在最后使用带有“()”的侦听器,看:
<p:ajax event="change" update="produtos" listener="#{layoutExportacaoMB.carregarProdutosContrato()}" />
为我工作。
【问题讨论】:
-
代码中有很多杂音。很可能是转换/验证错误导致表单提交阻塞。在您的页面上放置一个
<p:messages/>组件以查看可能的错误 -
错误的解决方案。您应该在 java 端的方法参数/签名中添加了正确的事件,而不是在 tge xhtml 的调用中添加 ()。其次,解决方案属于答案,而不是通过问题中的编辑
标签: jsf jsf-2 primefaces