Problema com o rich:datascroller + rich:modalPanel

4 respostas
D

Ola a todos,
estou desenvolvendo um sistema de mensagens e encontrei um problema bem chato.
Tenho uma lista de mensagens e cada mensagem abre um modalpanel com o conteudo da mensagem qndo clicada.
Até este ponto, nenhum problema, porem devido a quantidade de mensagens foi implementado um datascroller.
Aparentemente o datascroller esta totalmente funcional. O problema acontece aqui, na primeira pagina o modalpanel exibe as informações da mensagem normalmente, porem quando mudamos de pagina, ao clicar na mensagem, o modalpanel aparece em branco. Achei que o problema poderia estar na hora de pegar o objeto ta tabela, porem, ao debugar, observei que o objeto esta sendo pego corretamente. Neste ponto cheguei a conclusão que o problema pode estar no modalpanel.

Alguem poderia me ajudar com este problema?

Modalpanel:
<rich:modalPanel id="modal" height="100" width="100"
		resizeable="false" moveable="true">

		<h:panelGrid>
			<h:outputText value="#{msgs.textoMsg }" style="font-weight: bold" />
			<h:inputTextarea cols="45" rows="10" style="overflow:scroll"
				readonly="true" value="#{meuBean.objeto.mensagem}" />
		</h:panelGrid>

		<a4j:commandButton value="Ok" reRender="pnlAviso, tblInicioMsg"
			onclick="javascript: Richfaces.hideModalPanel(modal');" />

</rich:modalPanel>

minha tabela.

<rich:datascroller align="center" for="tblInicioMsg" maxPages="20"
	                  id="datascroller "  />
	 	<rich:dataTable align="center" value="#{meuBean.lista}" 
			var="aviso" width="400" binding="#{meuBean.table}"
			rowClasses="tableRow" id="tblInicioMsg" rows="10">
			<rich:column id="cav1">
				<f:facet name="header">
					<h:outputText value="#{msgs.titulo}" />
				</f:facet>
				<a4j:commandLink action="#{meuBean.visualizaMensagem}"
					reRender="pnlAviso" value="#{aviso.titulo}" styleClass="hyperLink"
					oncomplete="javascript:Richfaces.showModalPanel('pnlAviso',{left:'auto', top:'auto', width:'400px', height:'auto' })">
				</a4j:commandLink>

			</rich:column>
		</rich:dataTable>
Como disse antes, creio que não há necessidade de postar o bean pois ele, creio que, esta trabalhando corretamente

Obrigado desde já

4 Respostas

D

Alguem teria algo a acrescentar ou sugerir?

G

Eu costumo fazer tabela no rich assim:

não uso dessa forma:

oncomplete="javascript:Richfaces.showModalPanel('pnlAviso',{left:'auto', top:'auto', width:'400px', height:'auto' })">

uso dessa forma:

oncomplete="#{rich:component('pnlAviso')}.show()"
<rich:dataTable align="center" value="#{meuBean.lista}"   
     var="aviso" width="400" binding="#{meuBean.table}"  
     rowClasses="tableRow" id="tblInicioMsg" rows="10">  

     <rich:column id="cav1">
         <f:facet name="header">
            <h:outputText value="Nome da coluna" />
         </f:facet>   
     </rich:column>
     <h:column>
         <a4j:commandLink ajaxSingle="true" id="idComponente" oncomplete="#{rich:component('pnlAviso')}.show()" reRender="pnlAviso">
         <h:outputText value="#{aviso.nomeAtributo}" />
         <f:setPropertyActionListener value="#{aviso}" target="#{msgs.objetoOndeSeraInseridoValue}" />
         </a4j:commandLink>
     </h:column>
 </rich:dataTable>

agora é só adaptar para seu código.

qualquer dúvida. posso mostrar um exemplo mais completo e mais detalhado.

D

Boa tarde a todos,

Obrigado gerdan pela dica, eu estou utilizando agora o metodo que você apresentou, porem meu problema era que eu estava igualando a "null" meu objeto qndo estava setando a tabela, mas isso agora foi resolvido.

Entretando, apensar de achar que problema havia sido resolvido, me deparei com um grande problema, o modalPanel nao era exibido no Internet Explorer. =@

Depois de muito pesquisar consegui mostra-lo no IE.
Entretando o não funciona muito bem no IE, atributo "action" não funciona corretamente e não chama o metodo desejado. Desta forma o modal panel funcionava corretamente no FF mas nao exibia os valores no IE.

Novamente fui buscar novas possibilidades. Então comecei a usar o no pois assim o metodo do bean era chamado. Enfim fiquei feliz, mas como a alegria de aprendiz de programador dura pouco, os valores estavam sendo mostrados, mas o panel mostrava sempre uma requisição anterios mesmo colocando no suporte pra dar rerender oncomplete.

Com isso, tentei uma nova forma de manipular os valores da tabela atravéz do que setava uma variavel de controle de linha da tabela. Mas como a vida é uma caixinha de surpresas, isso tambem não foi o suficiente. Uma vez ele fazia certo outra vez ele pegava a requisição do objeto anterior. Ainda não estava bom. Com isso apos mexer bastante cheguei a esta solição.

O modalPanel ficou igual ao anterior.

Botão para exibir o modalPanel

<a4j:commandLink value="#{objTable.titulo}"
	styleClass="hyperLink">
		<a4j:support event="onclick" reRender="pnlAviso"
			oncomplete="#{rich:component('pnlModal')}.show()">
				<a4j:actionparam name="nEtapa" 	value="#{objTable.id}"
					assignTo="#{meuBean.linha}" />
		</a4j:support>
</a4j:commandLink>

função linha da classe meuBean

public void setLinha(int linha) {
	this.linha = linha;
	System.out.println(linha);
	funçãoSetObj();
}

Função funçãoSetObj da classe meuBean

public void visualizaMensagem() {

	//varendo a lista de nome "Objetos"
		for (Objeto o : objetos) {
		if (o.getId() == linha) {
			obj = o;
			break;
		}
	}
}

Eu sei que não ficou a coisa mais linda do mundo, mas para mim resolveu, se alguem tiver com o mesmo problema com os navegadores, isso poderá ajudar.

e se alguem souber de uma maneira mais bonita de resolver isso, por favor post

Abraços

P

Tenho o mesmo problema, no meu caso um botão pra apagar a linha do pedido de abono

Fiz de forma simples (entenda-se, tinha pouco tempo quando implementei), e coloquei toda a função dentro do rich:column

<rich:column style="text-align:center">
                                            <f:facet name="header">
                                                <h:outputText value="NEGAR"/>
                                            </f:facet>
                                            <h:outputLink  value="#" id="link">
                                                <center>
                                                    <h:graphicImage  value="../images/negado.png" style="border:0"/>
                                                    <rich:componentControl for="negarPanel" attachTo="link" operation="show" event="onclick"/>
                                                </center>
                                            </h:outputLink>
                                            
                                            <center>
                                                <rich:modalPanel id="negarPanel" width="330" height="190">
                                                    <f:facet name="header">
                                                        <h:panelGroup>
                                                            <h:outputText value="NEGAR"></h:outputText>
                                                        </h:panelGroup>
                                                    </f:facet>
                                                    <f:facet name="controls">
                                                        <h:panelGroup>
                                                            <h:graphicImage value="/images/close.gif" styleClass="hidelink" id="hidelink"/>
                                                            <rich:componentControl for="panel" attachTo="hidelink" operation="hide" event="onclick"/>
                                                        </h:panelGroup>
                                                    </f:facet>
                                                    <center>
                                                        <h:outputText value="Digite uma justificativa: "/>
                                                        <h:inputTextarea onkeydown="limitText(this,200);" onkeyup="limitText(this,200);"
                                                                         rows="4" cols="45" value="#{solicitacaoAbono.respostaJustificativa}" />

                                                        <br/>
                                                        <br/>
                                                        <h:commandButton value="Enviar" type="submit" id="enviar" action="#{solicitacaoAbono.negar}">
                                                            <rich:componentControl for="panel" attachTo="enviar" operation="hide" event="onclick"/>
                                                        </h:commandButton>
                                                    </center>
                                                </rich:modalPanel>
                                            </center>

                                        </rich:column>
<rich:datascroller align="center" for="tableSolicitacoesAbono" maxPages="20"
                                                       page="1" id="sc2"
                                                       renderIfSinglePage="false"/>

mesma coisa, quando mudo a pagina no scroll, o botão h:outputLink negar nem me dá a opção de ser clickado

Criado 9 de setembro de 2009
Ultima resposta 5 de mar. de 2013
Respostas 4
Participantes 3