ModalPanel de pesquisa (JSF)

2 respostas
ibispo

Ola todos!

Eu estou desenvolvendo telas de cadastro utilizando templates e me surgiu um problema. Dentro de um determinado cadastro eu faço uma chamada para a tela de pesquisa que acionará um ModalPanel. Quando eu clico no botão “pesquisar”, o ModalPanel simplesmente fecha. Olhando para a BB eu percebi que ele executou a Action, tanto que quando eu aciono novamente o ModalPanel, na dataTable aparecem os registros e eu consigo fazer a seleção.

Abaixo a parte do template_cadastro.xhtml que coloquei o ui:insert

(to dando uma cortada para facilitar o entendimento)

<html xmlns="http://www.w3.org/1999/xhtml"
      ... >
    
    <a4j:outputPanel id="pesqOutputPanel#{nomeForm}">
        <ui:insert name="pesqModalBlock">
        </ui:insert>
    </a4j:outputPanel>

</html>

dentro da tela de cadastro_equipamentos.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
      ... >

    <ui:composition template="/WEB-INF/template_cadastro.xhtml">

        <ui:define name="pesqModalBlock">
            <a4j:include viewId="/webPages/pesquisaModal.xhtml"/>
            ... ou ...
            <ui:include src="/webPages/pesquisaModal.xhtml"/>
            [b]... EM AMBOS O RESULTADO FOI O MESMO ....[/b]
        </ui:define>


    </ui:composition>
    
</html>

e dentro do pesquisaModal.xhtml…

<html xmlns="http://www.w3.org/1999/xhtml"
      ...>

    <ui:composition>

        <!-- modal de pesquisa no cadastro -->
        <rich:modalPanel id="mpPesquisa" width="625" height="500" resizeable="false">
            <f:facet name="header">Pesquisa</f:facet>

            <a4j:form>

                <h:panelGrid columns="4">
                    <h:column>
                            <h:outputText value="Pesquisa:" styleClass="campoLabel"/>
                    </h:column>
                    <h:column>
                        <h:inputText id="pesqNome" value="#{pesquisaMB.campoConsulta}" size="50"/>
                    </h:column>
                    <h:column>
                        <h:commandButton value="Pesquisar" action="#{pesquisaMB.pesquisar}"/>
                    </h:column>
                    <h:column>
                        <h:commandButton id="btnVolta" value="Voltar"
                                           onclick="#{rich:component('mpPesquisa')}.hide()"/>
                    </h:column>
                </h:panelGrid>

                <rich:spacer height="10"/>

                <rich:dataTable width="605"
                                id="listPesqPessoas"
                                rows="10"
                                rowClasses="odd-row,even-row"
                                columnClasses="col"
                                value="#{pesquisaMB.listaConsulta}"
                                var="row">

                    <rich:column sortBy="#{row.codigoOrdem}" sortOrder="ASCENDING" >
                        <f:facet name="header">
                            <h:outputText styleClass="headerText" value="Código"/>
                        </f:facet>
                        <h:outputText value="#{row.codigoOrdem}" />
                    </rich:column>

                    <rich:column sortBy="#{row.nome}" sortOrder="ASCENDING" >
                        <f:facet name="header">
                            <h:outputText styleClass="headerText" value="Nome"/>
                        </f:facet>
                        <h:outputText value="#{row.nome}" />
                    </rich:column>

                    <rich:column>
                        <f:facet name="header">
                            <h:outputText styleClass="headerText" value="Ações"/>
                        </f:facet>
                        <span>
                            <h:commandLink value="selecionar"
                                             onclick="#{rich:component('mpPesquisa')}.hide()">
                                <f:setPropertyActionListener value="#{row}"
                                                             target="#{pesquisaMB.dadosPessoas}"/>

                            </h:commandLink>
                        </span>
                    </rich:column>
                </rich:dataTable>

                <rich:spacer height="10"/>

                <rich:datascroller align="center"
                                   for="listPesqPessoas"
                                   maxPages="10"
                                   reRender="outLista"/>

            </a4j:form>
        </rich:modalPanel>

        <rich:panel id="pParams"
                    style="vertical-align:top; text-align:left; width:922px;">

            <h:panelGrid columns="6">
                <h:column>
                    <h:outputText value="Cliente:" styleClass="campoLabel"/>
                </h:column>
                <h:column>
                    <h:outputLink value="#" id="link">(procurar)
                        <rich:componentControl for="mpPesquisa"
                                               attachTo="link"
                                               operation="show"
                                               event="onclick"/>
                    </h:outputLink>
                </h:column>
                <h:column>
                    <h:inputText id="pesqClienteCodigo"
                                 value="#{pesquisaMB.dadosPessoas.codigoOrdem}"
                                 size="6"
                                 styleClass="campoInput"
                                 disabled="true"/>
                </h:column>
                <h:column>
                    <h:inputText id="pesqClienteNome"
                                 value="#{pesquisaMB.dadosPessoas.nome}"
                                 size="65"
                                 styleClass="campoInput"
                                 disabled="true"/>
                </h:column>
            </h:panelGrid>

        </rich:panel>

    </ui:composition>

</html>

A pesquisa até funciona, mas o Modal fecha?

Gostaria da ajuda dos amigos mais experientes. Eu estou achando que é problema de submit das telas que está fechando mas não pesquisei bastante e não achei o bug.

Por favor, façam perguntas e estarei online no forum para podermos achar esse erro.

Conto com a ajuda da comunidade.

Bispo

2 Respostas

V

Amigo, um h:commandButton sempre renderiza o form inteiro depois de realizar a action. Por isso, o modal panel some.
Se vc não quiser que o modal panel suma após executar a action, use o componente Ajax chamado a4j:commandButton

Dentro do Richfaces já existem esses componentes ^^. Pode dar uma pesquisada…

V

Amigo, o componente h:commandButton renderiza o form inteiro depois que a action é executada, por isso o modal panel some.
Para evitar isso, utilize o componente a4j:commandButton disponível no próprio RichFaces

Criado 25 de maio de 2009
Ultima resposta 26 de mai. de 2009
Respostas 2
Participantes 2