【问题标题】:Updating a dynamic generated selectOneMenu更新动态生成的 selectOneMenu
【发布时间】:2012-10-09 22:46:00
【问题描述】:

在我的网络应用程序中,我有以下数据表:

<!-- Exibição da lista de públicos -->
                <p:dataTable id="dtEventos" 
                             value="#{relatoriosBean.listaEventos}"
                             paginator="true" rows="5" 
                             rowsPerPageTemplate="5,10"
                             paginatorPosition="bottom"
                             paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                             var="atual"
                             emptyMessage="Não há eventos para exibição"
                             rendered="#{relatoriosBean.exibirPainelDados}">

                    <f:facet name="header">
                        Eventos
                    </f:facet>

                    <p:column sortBy="#{atual.nmeEvento}" styleClass="wrap">
                        <f:facet name="header">
                            Nome
                        </f:facet>
                        <p:panelGrid columns="1" 
                                     styleClass="gridNoLine">
                            <h:outputLabel id="olViewNomeEvento" 
                                           value="#{atual.nmeEvento}" 
                                           styleClass="t2"/>
                            <p:separator title="Descrição do evento"/>
                            <p:row>
                                <h:outputLabel value="Início: " styleClass="t2"/>
                                <h:outputLabel value="#{atual.dtaInicioEvento}"/>
                                <h:outputLabel value="Término: " styleClass="t2"/>
                                <h:outputLabel value="#{atual.dtaTerminoEvento}"/>
                            </p:row>
                            <h:outputLabel value="#{atual.dscEvento}" 
                                           styleClass="wrap"/>
                        </p:panelGrid>
                    </p:column>
                    <p:column>
                        <f:facet name="header">
                            Relatórios
                        </f:facet>
                        <p:panelGrid columns="2" styleClass="gridNoLine">
                            <p:selectOneMenu value="#{relatoriosBean.tipoEventoRelatorioSelecionado}"
                                             required="true"
                                             requiredMessage="Selecione o relatório a ser gerado."
                                             effect="fade">
                                <f:selectItem itemLabel="Selecione um item..." itemValue=""/>
                                <f:selectItems value="#{relatoriosBean.tiposEventoRelatorios}">
                                </f:selectItems>
                            </p:selectOneMenu>
                            <p:commandButton icon="ui-icon-document" 
                                             title="Gerar relatório"
                                             actionListener="#{relatoriosBean.gerarRelatorio}"
                                             update="UPDATE THE SELECTONEMENU OF THE LINE">
                                <f:setPropertyActionListener value="#{atual.idtEvento}"
                                                             target="#{relatoriosBean.idEventoSelecionado}}"/>
                            </p:commandButton>
                        </p:panelGrid>
                    </p:column>
                </p:dataTable>

如您所见,在其中一个数据表列中,我有一个 selectOneMenu。在同一列中,我有一个设置了 actionListener 的按钮。好吧,我想要的是:根据命令按钮的单击更新列的 selectOneMenu。有办法做到这一点吗?

好的!现在 f:setPropertyActionListener 没有设置属性 eventtoSelecionado。代码如下:

<p:dataTable value="#{relatoriosBean.listaEventos}"
                             var="atual">
                    ...

                    <p:column>
                        <f:facet name="header">
                            Relatórios
                        </f:facet>
                        <p:panelGrid columns="2" 
                                     styleClass="gridNoLine">
                            <p:selectOneMenu id="somRelatorios"
                                             value="#{relatoriosBean.relatorioSelecionado}"
                                             required="true"
                                             requiredMessage="Selecione o relatório a ser gerado."
                                             effect="fade">
                                <f:selectItem itemLabel="Selecione um item..." itemValue=""/>
                                <f:selectItems value="#{relatoriosBean.relatorios}">
                                </f:selectItems>
                            </p:selectOneMenu>
                            <p:commandButton id="cbGerarRelatorio"
                                             icon="ui-icon-document" 
                                             title="Gerar relatório"
                                             actionListener="#{relatoriosBean.gerarRelatorio}"
                                             update=":frmRelatorios:opPainelDados"
                                             process="@this somRelatorios"
                                             immediate="true">
                                <f:setPropertyActionListener target="#{relatoriosBean.eventoSelecionado}"
                                                             value="#{atual}"/>
                            </p:commandButton>
                        </p:panelGrid>
                    </p:column>
                </p:dataTable>

在 gerarRelatorio 动作侦听器中,属性 eventtoSelecionado 为 null。怎么了?

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    当然,将此id=mySelectOne 添加到您的&lt;p:selectOneMenu/&gt; 并在您的&lt;p:commandButton/&gt; 上将update 属性设置为update="mySelectOne"。但是为了在这个 ajax 更新中获得最佳结果,我强烈建议您将托管 bean 注释设置为 @ViewScoped(如果您还没有这样做的话)。您的命令按钮在更新结束时应如下所示

         <p:commandButton icon="ui-icon-document" 
                                             title="Gerar relatório"
                                             actionListener="#{relatoriosBean.gerarRelatorio}"
                                             update="mySelectOne">
    

    【讨论】:

    • @mnatan.brito 当然可以,但从技术上讲这是一个问题,因此您可能应该将其删除并作为单独的问题重新发布
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2020-07-22
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多