Passagem de parâmetro na navegação entre páginas

5 respostas
Y

Ao clicar no “botão” abaixo:

<p:button outcome="/usuarios/CadastroUsuario" icon="ui-icon-pencil" title="Editar">
 	<f:param name="idViewParam" value="#{usuario.id}" />
</p:button>

Aparece a seguinte URL:
http://localhost:8080/aplicacao/usuarios/CadastroUsuario.xhtml?idViewParam=1

Como fazer para que continue passando o parâmetro mas não apareça o “?idViewParam=1” na URL ou o parâmetro, no caso o 1, seja criptografado ou não permitir que o usuário informe manualmente na URL o parâmetro?

5 Respostas

D

Uma ideia para isso seria você criar uma campo usuario.token

Criptografe seu id no lado servidor e guarde no token.

enão no client ficaria assim:
<f:param name="idViewParam" value="#{usuario.token}"/>

Ao enviar novamente para o servidor você descriptografa.

Pode ser criptografia ou hash.

Talvez criptografia seja melhor, uma que seja dinâmica e mude o token a cada request mesmo sendo para o mesmo id.

Y

Existe alguma forma de passar o parâmetro sem aparecer na URL?

D

Existe, você envia via post.

Procure na documentação do JSF como enviar via post.

Y

Amigão, estive pesquisando, mas não consegui fazer.
Tenho dois managed bean, um é para pesquisar e outro para realizar a manutenção do usuário (cadastro e edição).
Quando estou na pesquisa, tem o botão de edição. Quando clico, direciono para o xhtml de cadastro, gostaria de passar o objeto usuário, ou somente o id, para o managed bean de cadastro.
Hoje está funcionando certo passando o parâmetro pela URL, mas gostaria que não aparecesse mais na URL.
Obrigado.

A

@Yawehrafa, não é possível fazer um redirect utilizando POST, o que da pra fazer é simular esse cenário.

Redireciona seu bean pra uma página temporária, com todos os valores em inputs do tipo hidden.
Na página vc teria mais ou menos isso:

<script type="text/javascript">
	
	window.onload = function() {
		enviarForm();
	}
	
	function enviarForm() {
		document.getElementById("formTemporario").action="http://localhost:9090/minhapag/blablabla";
                document.getElementById("formTemporario").submit();
        }
      
</script>
<h:form id="formTemporario" prependId="false">
	<h:inputHidden id="idX" value="#{meuBean.detalhes.idX}" />
</h:form>
Criado 29 de dezembro de 2015
Ultima resposta 5 de jan. de 2016
Respostas 5
Participantes 3