java - JSF 更新 p :selectOneMenu from another p:selectOneListbox with Ajax

标签 java ajax jsf primefaces

我一直在尝试做一些非常简单的事情......但它行不通。

我有 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/

相关文章:

java - Weld 和测试 jar

java - 使用OAuth Google客户端程序时出现redirect_uri_mismatch错误

javascript - 使用 id 从表中删除特定行并使用 Jquery Ajax php mysql 在后台刷新同一个表

asp.net - asp.net 页面中的 AJAX PageRequestManagerParserErrorException 错误

javascript - 使用 PHP 数组中的 JSON.parse 时出现“意外标记”

jsf - 如何确定代码中的当前 JSF 生命周期阶段

java - 在 Spring 上下文加载之前避免 Log4j 警告

java - 如何在 Eclipse 中添加 Maven 依赖项?

JSF 2 -- 永久重定向 (301)

java - 从 jsf 中的 java 代码调用警告框