我一直在尝试做一些非常简单的事情......但它行不通。
我有 2 个“p:selectOneMenu”,因此第二个项目取决于第一个项目中所选的项目。它们在 bean 中都有自己的方法来列出它们的项目。
我想要做的是,当第一个更改其值时,更新另一个,以便组件应该考虑所选对象重新加载列表。但是ajax永远不会发生,至少在调试时Bean中的方法永远不会再次被调用。
出了什么问题?代码类似于...
谢谢!!! :)
<p:selectOneMenu value="#{itemBean.lotacao}">
<f:selectItem itemLabel="Choose one" />
<f:selectItems value="#{itemBean.listLotacoes()}"
var="lotacao"
itemLabel="#{lotacao.format()}" />
<p:ajax update="localizacaoPorLotacao" />
</p:selectOneMenu>
<p:selectOneMenu id="localizacaoPorLotacao"
value="#{itemBean.localizacao}">
<f:selectItem itemLabel="Choose one" />
<f:selectItems value="#{itemBean.listByLotacao(itemBean.lotacao)}" />
</p:selectOneMenu>
@ManagedBean
@SessionScoped
public class ItemBean {
// attributes, getters and setters here...
public List<Lotacao> listLotacoes() {
LotacaoService lotacaoService = new LotacaoService();
List<Lotacao> lotacoes = lotacaoService.getAll();
return lotacoes;
}
public List<Lotacao> listByLotacao(Lotacao lotacao) {
if (lotacao == null) {
return new ArrayList<Lotacao>();
}
String prefixo = lotacao.getCodigo().substring(0, 1);
LotacaoService lotacaoService = new LotacaoService();
List<Lotacao> lotacoes = lotacaoService.getByPrefix(prefixo);
return lotacoes;
}
}
最佳答案
找到了!
由于缺少类转换器,JSF 无法触发 setter。 创建转换器并将其添加到 OneMenu 后,代码运行得很好。
最终版本是:
<p:selectOneMenu value="#{itemQuadroVagasBean.lotacao}"
converter="orgaoLotacaoCodigoConverter">
<p:ajax event="change"
update="localizacaoPorLotacao" />
<f:selectItem itemLabel="Selecione a lotação" />
<f:selectItems value="#{itemQuadroVagasBean.listarLotacoes()}"
var="lotacao"
itemLabel="#{lotacao.formatarLocalizacao()}" />
</p:selectOneMenu>
关于java - JSF 更新 p :selectOneMenu from another p:selectOneListbox with Ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26629149/