RichFace modalPanel

4 respostas
K

Olá a todos !

Bom galera, meu problema é o seguinte…
Eu tenho um arquivo jsp onde implementei uma tela de “cadastro de clientes” usando o “modalPanel” onde posso arrasta-la para qualquer
lugar no browser, etc…

E implementei outra tela de “busca de clientes” também usando o “modalPanel”.
Agora estou tentando chamar a tela de busca apartir de um botão da tela de cadastro.
A aplicação esta chamando porém está sumindo a tela de cadastro.
E gostaria que a tela de busca aparecece por cima da tela de cadastro de dando o efeito de uma tela sobre a outra.
É possível fazer tal implementação ? Lembrando que são 2 arquivos JSP.

Desde já agradeço a atenção.

4 Respostas

K

Só um detalhe:
Estou usando o RichFaces modalPanel.

Vlw

tiagorg

Ei kranio,

Acredita que estou em uma situação muito parecida?

Eu consegui implementar de uma maneira, mas ainda há empecilhos e aproveito o espaço para buscar uma solução.

No caso, eu inclui a página de busca como um IFRAME dentro do ModalPanel. Ficou assim (na página de cadastro - CidadeEdit.xhtml):

<div class="actionButtons">
						<h:form id="formSelecionar">
							<input onclick="Richfaces.showModalPanel('panelUF', {width:'785px', height:'525px'});" value="#{messages.selecionar}" type="button" />
						</h:form>
						<a:form>
					        <rich:modalPanel id="panelUF" >
								<f:facet name="header">
						            <h:outputText value="#{messages.selecionar} #{messages.uf}" />
	 					        </f:facet>
								<f:facet name="controls">
						            <h:graphicImage value="/img/close.png" style="cursor:pointer" onclick="Richfaces.hideModalPanel('panelUF')" />
						        </f:facet>	 					        
	 					        <iframe src="UFSelect.xhtml" width="760" height="480"></iframe>
					        </rich:modalPanel>
						</a:form>						
					</div>

Nesta janela que abre, que possibilita a seleção de uma UF para esta cidade, tem uma busca paginada que possibilita o usuário selecionar uma UF. Ao pressionar o botão de selecionar, o objeto selecionado é armazenado no contexto da sessão e a janela é fechada, e a janela anterior é postada. Aí, meu backing bean JSF obtém este objeto selecionado diretamente do contexto da sessão e armazena nele mesmo.

A janela de busca possui, para cada objeto que aparece como resultado da busca, um botão para selecioná-lo:

<h:commandButton action="#{ufListController.selecionar(_uf.id)}" value="#{messages.selecionar}" style="margin:0px;" />

Quando a janela de busca seleciona um objeto, ela posta o form, armazena este objeto no contexto da sessão e seta uma flag selecionado = true, e desta maneira eu coloquei o seguinte código no início da página de busca:

<h:outputText rendered="#{ufListController.selecionado == true}">
		<script type="text/javascript" >
			parent.document.getElementById('formCidade:save').click();
			parent.Richfaces.hideModalPanel('panelUF');
		</script>
	</h:outputText>

Portanto, após postar o form, a página é recarregada, aí ela cai na condição acima e é fechada automaticamente e, neste momento, a janela de cadastro tem seu form postado, acessando o método que obtém o objeto selecionado do contexto da sessão.

Pode não ter ficado lindo mas aqui funcionou. Se alguém tiver uma sugestão melhor ou crítica, por favor estou a ouvidos, pois não estou certo que esta solução é boa o suficiente.

Meu problema agora é o seguinte: Em outra janela de cadastro, eu quero em um ModalPanel inserir uma outra janela de cadastro.
No caso é o cadastro de Usuario, que dentro dele quero chamar o cadastro de Email.

O que acontece é que tenho uma superclasse de backing beans controladores de edição (cadastros), que possui métodos gerais úteis para todos.
Tanto o backing bean de cadastro de Usuario quanto o de Email herdam desta superclasse.

Então, quando eu carrego a janela de cadastro de Usuario (que carrega o backing bean de cadastro de Usuario), ela carrega dentro dela o cadastro de Email (que carrega o backing bean de cadastro de Email), e o problema que dá é que depois de postar, o sistema entende que o backing bean de Usuario agora é o de Email!

Ou seja, quando eu faço assim: #{usuarioEditController.bean.pessoaFisica.cpf}
Ele dá exceção dizendo que Email não tem o atributo pessoaFisica.

E olhe que tanto usuarioEditController (o backing bean de cadastro de Usuario) quanto emailEditController (o backing bean de cadastro de Email) estão corretamente configurados no faces-config.xml.

Então eu pergunto: qual é o principal problema? É um problema de design? Sou iniciante e por isso desconfio que o design arquitetural que fiz, visando reutilização, ficou problemático.

Não devo utilizar superclasse de backing beans? Ou algo assim?

K

E aí galera !
Desculpe-me não ter respondido mais a tempo.
Mas as implementações com a NFe aqui na empresa me deixou bem ocupado.

Bom…
Pelo que tive olhando, creio que meu problema possa ser resolvido usando “facelet”.
Mas está dificil achar um tutorial bom usando RichFace com Facelets.
Eu crio as páginas mas o browser não renderiza. Fica uma página em branco.
Porém se mando visualizar o código fonte da página. O mesmo aparece.
Será alguma incompatibilidade no uso das versões das bibliotecas de RichFaces com Facelet ?

Estou usando os jars das últimas versões de Facelets, Mojarra e RichFaces.

Alguma sugestão ?

obrigado a todos !

tiagorg

Kranio,

Dê uma olhada nos logs, ou mesmo o próprio log da janela de execução do servidor. Lá deve ter alguma exceção do Facelets.

Tiago

Criado 10 de março de 2010
Ultima resposta 6 de abr. de 2010
Respostas 4
Participantes 2