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?
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.
Existe alguma forma de passar o parâmetro sem aparecer na URL?
Existe, você envia via post.
Procure na documentação do JSF como enviar via post.
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.
@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>