Problema com dataTable dentro de um modalPanel

5 respostas
genoulcha

Olá senhores!

Estou com um problema aqui que é o seguinte: Tenho um campo de texto com um botão do lado para pesquisa. Quando é clicado nesse botão, a aplicação exibe um modalPanel com os resultados da busca, considerando o conteúdo preenchido no campo. O problema é que eu não estou conseguindo os resultados dessa busca, já tentei várias maneira de vários tutoriais, mas, ou o modalPanel some, ou os dados somem ou a dataTable fica em branco.

Seguem os trechos de código:

Código do edit e do botão de buscar

<h:panelGroup>
	<h:inputText id="area" value="#{article.selectedArea}">
	</h:inputText>
	<a4j:commandButton id="searchAreaButton" value="Procurar" 
		reRender="searchAreaPanel" action="#{article.fillAllAreas}"
		onclick="javascript:Richfaces.showModalPanel('searchArea')" />
</h:panelGroup>

Código do Bean para preenchimento dos dados da tabela

public String fillAllAreas() {
		if (selectedArea != null) {
			JPASession session = JPASessionFactory.createSession("sober");
			List<Area> allAreas = session.query("SELECT a FROM Area a WHERE lower(a.descricao) LIKE ?", "%" + selectedArea + "%");
			areas = new ListDataModel<Area>(allAreas);
		}
		
		return null;
	}

Código do ModalPanel

<a4j:outputPanel id="searchAreaPanel" layout="none">
	<rich:modalPanel id="searchArea" width="320" height="240">
		<f:facet name="header">
			<h:outputText value="Areas" />
		</f:facet>
		<f:facet name="controls">
            <h:panelGroup>
                <h:graphicImage value="/images/controls/close.png" 
                	styleClass="hidelink" id="hideAreaPanel"/>
                <rich:componentControl for="searchArea" attachTo="hideAreaPanel" 
                	operation="hide" event="onclick"/>
            </h:panelGroup>
       </f:facet>
        <h:panelGroup id="areasDataTable">
        	<h:panelGroup rendered="#{article.allAreas == null }">
        		<h:graphicImage value="/images/lp.gif" style="align: center" />
        	</h:panelGroup>
			<h:panelGroup rendered="#{article.allAreas != null}">
				<h:form>
					<rich:scrollableDataTable id="listAreas" value="#{article.allAreas}" 
							var="area" rows="10" width="200px" height="180px">
						<rich:column>
							<f:facet name="header">
								<h:outputText value="Areas" />
							</f:facet>
							<h:commandLink id="selectArea" value="#{area.sigla}" 
									action="#{article.selectArea}">
				                <rich:componentControl for="searchArea" attachTo="selectArea" 
				                	operation="hide" event="onclick" />
							</h:commandLink>
						</rich:column>
						<rich:column>
							<f:facet name="header">
								<h:outputText value="Descrição" />
							</f:facet>
							<h:outputText value="#{area.descricao}" />
						</rich:column>
					</rich:scrollableDataTable>
					<h:commandButton value="Nova" />
				</h:form>
			</h:panelGroup>
		</h:panelGroup>
	</rich:modalPanel>
</a4j:outputPanel>

No caso, eu estou mandando reRenderizar o a4j:outputPanel e o que está acontecendo é que quando eu clico no botão o modalPanel aparece, aparece a imagem de “processando” (lp.gif) mas quando o processo termina, o modalPanel some.

Se eu colocar para reRenderizar o panelGroup “areasDataTable”, aparece a imagem de processando, mas quando termina, não aparece nada no modalPanel, mas o modalPanel continua sendo exibido.

Se eu colo o a4j:outputPanel dentro do modalPanel, aparece a imagem de processando, mas fica nisso (não é reRenderizado).

Alguém poderia me ajudar com esse problema? Desde já agradeço.

5 Respostas

A

cara,

ja passei por essa situação, no modal possui um propriedade, showWhenRendered, vc vai ter que manipula-la, qdo abrir o modal, vc tem que setar essa propriedade para true, e qdo sair para false.

t+

genoulcha

Cara, não entendi a sua colocação. Teoricamente ao invocar os métodos “hideModalPanel” e “showModalPanel” eu já estou manipulando essa propriedade, não?

A

cara,

nao sei o motivo o pq ocorre isso, mas no meu projeto eu setei e funcionou cara. :slight_smile:

t+

genoulcha

Pessoal, fiz uns testes aqui e percebi que sempre que eu mando renderizar novamente algum componente (utilizando o reRender), desaparece tudo o que está dentro do componente. Vocês já viram isso, tem alguma idéia do que pode ser?

Java_Lover

Eu uso estes mesmos recursos de ModalPanel de pesquisa.
Mas uma abordagem está diferente em nossos códigos.
Ao invés de usaronclick="javascript:Richfaces.showModalPanel()eu usooncomplete="javascript:Richfaces.showModalPanel()

Criado 7 de novembro de 2011
Ultima resposta 7 de nov. de 2011
Respostas 5
Participantes 3