java - 值未将 selectOneMenu 设置为 ManagedBean

标签 java jsf-2 primefaces

我有一个 selectOneMenu,可以根据需要加载另一个菜单。请参阅:

<h:outputLabel value="Tabela: *" />
                <p:selectOneMenu id="selectOneMenuTabela"
                    converter="entityConverter"
                    value="#{orcamentoMB.tabelaSelecionada}" effect="fade"
                    required="true" requiredMessage="A Tabela é obrigatória">
                    <f:selectItem itemLabel="Selecione uma Tabela" itemValue="" />
                    <f:selectItems value="#{orcamentoMB.tabelas}" var="tabela"
                        itemLabel="#{tabela.nome}" itemValue="#{tabela}" />
                    <p:ajax event="change" update="selectOneMenuProcedimento" />
                </p:selectOneMenu>

                <h:outputText value="Procedimento: *" />
                <p:selectOneMenu id="selectOneMenuProcedimento"
                    disabled="#{orcamentoMB.tabelaSelecionada == null}"
                    converter="entityConverter" filter="true"
                    filterMatchMode="contains"
                    value="#{orcamentoMB.itemTabelaProcedimentoSelecionado}"
                    effect="fade" required="true"
                    requiredMessage="O procedimento é obrigatório">
                    <f:selectItem itemLabel="Selecione um Procedimento" itemValue="" />
                    <f:selectItems value="#{orcamentoMB.tabelaSelecionada.itens}"
                        var="item" itemLabel="#{item.procedimento.nome}"
                        itemValue="#{item}" />
                    <p:ajax event="change"
                        update="localAplicacao, selectOneMenuDente,selectOneMenuFace" />
                </p:selectOneMenu>

                <h:outputText value="Local Aplicação: *" />
                <h:outputText id="localAplicacao"
                    value="#{orcamentoMB.itemTabelaProcedimentoSelecionado.procedimento.localAplicacao.descricao}" />

                <h:outputText value="Dente: *" />
                <p:selectOneMenu id="selectOneMenuDente" converter="entityConverter"
                    filter="true" filterMatchMode="contains"
                    disabled="#{orcamentoMB.itemTabelaProcedimentoSelecionado.procedimento == null || orcamentoMB.itemTabelaProcedimentoSelecionado.procedimento.dentesAsList.size() == 0}"
                    value="#{orcamentoMB.denteSelecionado}" effect="fade">
                    <f:selectItem itemLabel="Selecione um Dente" itemValue="" />
                    <f:selectItems
                        value="#{orcamentoMB.itemTabelaProcedimentoSelecionado.procedimento.dentesAsList}"
                        var="dente" itemLabel="#{dente.descricao}" itemValue="#{dente}" />
                </p:selectOneMenu>

                <h:outputText value="Face: *" />
                <p:selectOneMenu id="selectOneMenuFace" converter="entityConverter"
                    disabled="#{orcamentoMB.itemTabelaProcedimentoSelecionado.procedimento.facesAplicacaoAsList.size() == 0 || orcamentoMB.itemTabelaProcedimentoSelecionado == null}"
                    value="#{orcamentoMB.faceSelecionada}" effect="fade">
                    <f:selectItem itemLabel="Selecione uma Face" itemValue="" />
                    <f:selectItems
                        value="#{orcamentoMB.itemOrcamento.itemTabelaProcedimento.procedimento.facesAplicacaoAsList}"
                        var="face" itemLabel="#{face.descricao}" itemValue="#{face}" />
                </p:selectOneMenu>

“selectOneMenuTabela”和“selectOneMenuProcedimento”工作正常,值在 ManagedBean 中设置,但其他值则不然。

当我尝试执行下面的命令按钮时:

<p:commandButton value="Incluir" icon="ui-icon-plus" process="@this"
                    disabled="#{orcamentoMB.bean.situacao.codigo != 'AGUARDANDO_ACEITACAO'}"
                    update=":formManterOrcamento:tabViewManterOrcamento:tabProcedimentos,:formManterOrcamento:panelTotais"
                    actionListener="#{orcamentoMB.addItemOrcamento}" />

“denteSelecionado”内的值为空,并且“selectOneMenuFace”内的值未加载。

最佳答案

由于您在前两个 selectOneMenu 上有 p:ajax event="change" 它们正在被提交,这就是您获得这些值的原因。要在单击 commandButton 时处理它们,请将这些组件 ID 与 @this 一起添加到 process 属性,就像 process="@this,selectOneMenuFace,selectOneMenuDente,.."

如果组件被禁用只读,那么它们将不会被处理。

希望这有帮助

关于java - 值未将 selectOneMenu 设置为 ManagedBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22358220/

相关文章:

java - Spring Boot + JdbcTemplate 有无法解释的查询慢?

java - 这个 JavaFX/FXML 自定义组件有什么问题?

java - 使用 URLConnection 的 Java 协议(protocol)符号进行测试

java - 在后台线程上运行的进程仍然卡住UI

session - 在带有 RequestScope 的 ManagedBean 中使用有状态 EJB 时出现问题

jsf - Primefaces excel 导出不起作用 - 不显示打开/保存对话框

javascript - primefaces 密码控制,按 Enter 键调用 webflow 功能

jsf - 如何使用 p :multiSelectListbox 的 header 和 showHeaders 属性

java - JSF 2 : How handle exceptions in controller?

jsf-2 - JSF 生命周期在页面刷新时运行 7 次