Passagem de parâmetro com JSF via POST + Redirect + Flash

253 views
Skip to first unread message

hvivox software

unread,
Mar 14, 2017, 5:23:20 PM3/14/17
to jav...@googlegroups.com
Olá pessoal,
Estava procurando uma solução de como passar parâmetro via post com redirect com o objetivo de manter a url atualizada e encontrei neste link a solução utilizando o getFlash: aqui, e aqui também.

String str = "teste";

FacesContext.getCurrentInstance().getExternalContext().getFlash().put("teste", str);
 e
@PostConstruct
public void init() {
     String strAux = (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("teste");
}

Esta solução me atendi bem, mas apenas por curiosidade alguém conhece uma forma diferente de fazer isso? Ou há alguma desvantagem de utilizar o flash para obter o parâmetro com redirect?



 

Rafael Ponte

unread,
Mar 14, 2017, 5:45:31 PM3/14/17
to jav...@googlegroups.com
oi,

Existe algumas soluções, algumas mais elegantes que outras. Mas deixa eu entender, o que você quer fazer exatamente?

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/javasf.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/CAB%2BSbeqxOYAU1PWNmmFJw2ta%2BwVAUdydv_DaqiHu460mhiX2GA%40mail.gmail.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

hvivox software

unread,
Mar 15, 2017, 12:09:07 AM3/15/17
to jav...@googlegroups.com
Então Rafael,
a ideia é navegar da tela consulta para a tela cadastro e não permitir que o usuário acesse a tela cadastro digitando manualmente a url, ou seja, impossibilitar que ele acesse os cadastros digitando o endereço pelo navegador, se ele digitar o endereço tem que aparecer um tela de acesso negado ou erro.

Além disso ao navegar da consulta para o cadastro tem que ser enviado um parâmetro o qual o usuário não pode saber o valor, além disso é importante manter a url sempre atualizada, ou seja e tiver na tela de cadastro o Browser deve mostrar a url da tela de cadastro.

Reformulando minha pergunta: o flash pode ser considerado uma forma elegante baseando-se nas premissas que citei?


att.
 



Em 14 de março de 2017 17:45, Rafael Ponte <rpo...@gmail.com> escreveu:
oi,

Existe algumas soluções, algumas mais elegantes que outras. Mas deixa eu entender, o que você quer fazer exatamente?

On Tue, Mar 14, 2017 at 6:23 PM hvivox software <desenvolvedor.analista@gmail.com> wrote:
Olá pessoal,
Estava procurando uma solução de como passar parâmetro via post com redirect com o objetivo de manter a url atualizada e encontrei neste link a solução utilizando o getFlash: aqui, e aqui também.

String str = "teste";

FacesContext.getCurrentInstance().getExternalContext().getFlash().put("teste", str);
 e
@PostConstruct
public void init() {
     String strAux = (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("teste");
}

Esta solução me atendi bem, mas apenas por curiosidade alguém conhece uma forma diferente de fazer isso? Ou há alguma desvantagem de utilizar o flash para obter o parâmetro com redirect?



 

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.

Jivago Silva

unread,
Mar 15, 2017, 8:35:18 AM3/15/17
to javasf: JavaServer Faces Group

Jivago Silva

unread,
Mar 15, 2017, 8:39:58 AM3/15/17
to javasf: JavaServer Faces Group

Em terça-feira, 14 de março de 2017 18:23:20 UTC-3, Desenvolvedor Analista escreveu:

Rafael Ponte

unread,
Mar 15, 2017, 8:54:01 AM3/15/17
to jav...@googlegroups.com
oi,

deixa eu ver se entendi: você quer acessar uma determinada página somente via POST?

On Wed, Mar 15, 2017 at 1:09 AM hvivox software <desenvolved...@gmail.com> wrote:
Então Rafael,
a ideia é navegar da tela consulta para a tela cadastro e não permitir que o usuário acesse a tela cadastro digitando manualmente a url, ou seja, impossibilitar que ele acesse os cadastros digitando o endereço pelo navegador, se ele digitar o endereço tem que aparecer um tela de acesso negado ou erro.

Além disso ao navegar da consulta para o cadastro tem que ser enviado um parâmetro o qual o usuário não pode saber o valor, além disso é importante manter a url sempre atualizada, ou seja e tiver na tela de cadastro o Browser deve mostrar a url da tela de cadastro.

Reformulando minha pergunta: o flash pode ser considerado uma forma elegante baseando-se nas premissas que citei?


att.
 



Em 14 de março de 2017 17:45, Rafael Ponte <rpo...@gmail.com> escreveu:
oi,

Existe algumas soluções, algumas mais elegantes que outras. Mas deixa eu entender, o que você quer fazer exatamente?

On Tue, Mar 14, 2017 at 6:23 PM hvivox software <desenvolved...@gmail.com> wrote:
Olá pessoal,
Estava procurando uma solução de como passar parâmetro via post com redirect com o objetivo de manter a url atualizada e encontrei neste link a solução utilizando o getFlash: aqui, e aqui também.

String str = "teste";

FacesContext.getCurrentInstance().getExternalContext().getFlash().put("teste", str);
 e
@PostConstruct
public void init() {
     String strAux = (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("teste");
}

Esta solução me atendi bem, mas apenas por curiosidade alguém conhece uma forma diferente de fazer isso? Ou há alguma desvantagem de utilizar o flash para obter o parâmetro com redirect?



 

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

hvivox software

unread,
Mar 15, 2017, 9:12:01 AM3/15/17
to jav...@googlegroups.com
Opa Rafael,
Isso mesmo, para que o usuário não veja os parâmetros que são transmitidos

att.

Em 15 de março de 2017 08:53, Rafael Ponte <rpo...@gmail.com> escreveu:
oi,

deixa eu ver se entendi: você quer acessar uma determinada página somente via POST?

On Wed, Mar 15, 2017 at 1:09 AM hvivox software <desenvolvedor.analista@gmail.com> wrote:
Então Rafael,
a ideia é navegar da tela consulta para a tela cadastro e não permitir que o usuário acesse a tela cadastro digitando manualmente a url, ou seja, impossibilitar que ele acesse os cadastros digitando o endereço pelo navegador, se ele digitar o endereço tem que aparecer um tela de acesso negado ou erro.

Além disso ao navegar da consulta para o cadastro tem que ser enviado um parâmetro o qual o usuário não pode saber o valor, além disso é importante manter a url sempre atualizada, ou seja e tiver na tela de cadastro o Browser deve mostrar a url da tela de cadastro.

Reformulando minha pergunta: o flash pode ser considerado uma forma elegante baseando-se nas premissas que citei?


att.
 



Em 14 de março de 2017 17:45, Rafael Ponte <rpo...@gmail.com> escreveu:
oi,

Existe algumas soluções, algumas mais elegantes que outras. Mas deixa eu entender, o que você quer fazer exatamente?

On Tue, Mar 14, 2017 at 6:23 PM hvivox software <desenvolvedor.analista@gmail.com> wrote:
Olá pessoal,
Estava procurando uma solução de como passar parâmetro via post com redirect com o objetivo de manter a url atualizada e encontrei neste link a solução utilizando o getFlash: aqui, e aqui também.

String str = "teste";

FacesContext.getCurrentInstance().getExternalContext().getFlash().put("teste", str);
 e
@PostConstruct
public void init() {
     String strAux = (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("teste");
}

Esta solução me atendi bem, mas apenas por curiosidade alguém conhece uma forma diferente de fazer isso? Ou há alguma desvantagem de utilizar o flash para obter o parâmetro com redirect?



 

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.

hvivox software

unread,
Mar 15, 2017, 9:13:11 AM3/15/17
to jav...@googlegroups.com
Obrigado Jivango,
vou analisar suas sugestões, ;)

att.

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/javasf.

Rafael Ponte

unread,
Mar 15, 2017, 9:24:29 AM3/15/17
to jav...@googlegroups.com
opa,

Está mais confuso ainda. JSF só submete via POST a partir dos componentes, então o usuário não teria como ver a informação a não ser que ele verificasse o pacote HTTP da requisição.

Será que um input-hidden não resolveria seu problema?

On Wed, Mar 15, 2017 at 10:11 AM hvivox software <desenvolved...@gmail.com> wrote:
Opa Rafael,
Isso mesmo, para que o usuário não veja os parâmetros que são transmitidos

att.

Em 15 de março de 2017 08:53, Rafael Ponte <rpo...@gmail.com> escreveu:
oi,

deixa eu ver se entendi: você quer acessar uma determinada página somente via POST?

On Wed, Mar 15, 2017 at 1:09 AM hvivox software <desenvolved...@gmail.com> wrote:
Então Rafael,
a ideia é navegar da tela consulta para a tela cadastro e não permitir que o usuário acesse a tela cadastro digitando manualmente a url, ou seja, impossibilitar que ele acesse os cadastros digitando o endereço pelo navegador, se ele digitar o endereço tem que aparecer um tela de acesso negado ou erro.

Além disso ao navegar da consulta para o cadastro tem que ser enviado um parâmetro o qual o usuário não pode saber o valor, além disso é importante manter a url sempre atualizada, ou seja e tiver na tela de cadastro o Browser deve mostrar a url da tela de cadastro.

Reformulando minha pergunta: o flash pode ser considerado uma forma elegante baseando-se nas premissas que citei?


att.
 



Em 14 de março de 2017 17:45, Rafael Ponte <rpo...@gmail.com> escreveu:
oi,

Existe algumas soluções, algumas mais elegantes que outras. Mas deixa eu entender, o que você quer fazer exatamente?

On Tue, Mar 14, 2017 at 6:23 PM hvivox software <desenvolved...@gmail.com> wrote:
Olá pessoal,
Estava procurando uma solução de como passar parâmetro via post com redirect com o objetivo de manter a url atualizada e encontrei neste link a solução utilizando o getFlash: aqui, e aqui também.

String str = "teste";

FacesContext.getCurrentInstance().getExternalContext().getFlash().put("teste", str);
 e
@PostConstruct
public void init() {
     String strAux = (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("teste");
}

Esta solução me atendi bem, mas apenas por curiosidade alguém conhece uma forma diferente de fazer isso? Ou há alguma desvantagem de utilizar o flash para obter o parâmetro com redirect?



 

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Arthur Gregório

unread,
Mar 15, 2017, 9:26:40 AM3/15/17
to jav...@googlegroups.com
Só de curiosidade, por que o user não pode ver os parâmetros? Seria algum token ou algo do tipo? 

O input-hidden como o Rafael falou já seria uma solução pelo que entendi.

Sobre acessar a URL e dar erro, você poderia tratar isso com um estado na tela e uma checagem via view-action ou ainda, com um framework de segurança (caso esteja usando um).
Em 15 de março de 2017 10:24, Rafael Ponte <rpo...@gmail.com> escreveu:
opa,

Está mais confuso ainda. JSF só submete via POST a partir dos componentes, então o usuário não teria como ver a informação a não ser que ele verificasse o pacote HTTP da requisição.

Será que um input-hidden não resolveria seu problema?
On Wed, Mar 15, 2017 at 10:11 AM hvivox software <desenvolvedor.analista@gmail.com> wrote:
Opa Rafael,
Isso mesmo, para que o usuário não veja os parâmetros que são transmitidos

att.

Em 15 de março de 2017 08:53, Rafael Ponte <rpo...@gmail.com> escreveu:
oi,

deixa eu ver se entendi: você quer acessar uma determinada página somente via POST?

On Wed, Mar 15, 2017 at 1:09 AM hvivox software <desenvolvedor.analista@gmail.com> wrote:
Então Rafael,
a ideia é navegar da tela consulta para a tela cadastro e não permitir que o usuário acesse a tela cadastro digitando manualmente a url, ou seja, impossibilitar que ele acesse os cadastros digitando o endereço pelo navegador, se ele digitar o endereço tem que aparecer um tela de acesso negado ou erro.

Além disso ao navegar da consulta para o cadastro tem que ser enviado um parâmetro o qual o usuário não pode saber o valor, além disso é importante manter a url sempre atualizada, ou seja e tiver na tela de cadastro o Browser deve mostrar a url da tela de cadastro.

Reformulando minha pergunta: o flash pode ser considerado uma forma elegante baseando-se nas premissas que citei?


att.
 



Em 14 de março de 2017 17:45, Rafael Ponte <rpo...@gmail.com> escreveu:
oi,

Existe algumas soluções, algumas mais elegantes que outras. Mas deixa eu entender, o que você quer fazer exatamente?

On Tue, Mar 14, 2017 at 6:23 PM hvivox software <desenvolvedor.analista@gmail.com> wrote:
Olá pessoal,
Estava procurando uma solução de como passar parâmetro via post com redirect com o objetivo de manter a url atualizada e encontrei neste link a solução utilizando o getFlash: aqui, e aqui também.

String str = "teste";

FacesContext.getCurrentInstance().getExternalContext().getFlash().put("teste", str);
 e
@PostConstruct
public void init() {
     String strAux = (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("teste");
}

Esta solução me atendi bem, mas apenas por curiosidade alguém conhece uma forma diferente de fazer isso? Ou há alguma desvantagem de utilizar o flash para obter o parâmetro com redirect?



 

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+unsubscribe@googlegroups.com.

hvivox software

unread,
Mar 15, 2017, 11:16:58 AM3/15/17
to jav...@googlegroups.com
Obrigado pelas dicas pessoal,

Não sabia que o inputHidden servia para isso também rsrs:

1) Estou utilizando o viewScoped será que ele vai manter a informação mesmo depois de um postBack que será feito na transição da tela de consulta para o cadastro?

2) Pesquisei e encontrei o exemplo abaixo que utiliza o javaScript, atualmente ainda é utilizado o js para passar esse parâmetro com o inputHidden?

<h:head>
	  <script type="text/javascript">
	    function printHiddenValue(){

	       alert(document.getElementById('myform:hiddenId').value);

	    }
	  </script>
	</h:head>
    <h:body>
    	<h1>JSF 2 hidden value example</h1>

	  <h:form id="myform">
    		<h:inputHidden value="#{user.answer}" id="hiddenId" />
    		<h:commandButton type="button" value="ClickMe" onclick="printHiddenValue()" />
    	  </h:form>

    </h:body>


Olá Arthur,
gostei da dica sobre o viewAction, então o objetivo é forçar o usuário chegar na tela de cadastro somente se ele clicar em um botão da tela de consulta. Se não não clicar ele não pode passar para o cadastro.

Se for via GET ele digita a url passa os parâmetros manualmente e chega na tela de cadastro.

Já com o POST ele só chega na tela de Cadastro se passar os parâmetros que serão transmitidos somente se o botão (que está na tela de consulta) for pressionado.


vlw.



Arthur Gregório

unread,
Mar 15, 2017, 12:56:39 PM3/15/17
to jav...@googlegroups.com
Sobre sua regra de negócio, do meu ponto de vista, você pode estar complicando as coisas de maneira desnecessária...

Basicamente, se o problema é apenas o processo do cara digitar a URL no browser, você pode usar um pattern de estados (algo como no ciclo de vida do JSF) onde de acordo com o estado enviado como parâmetro na URL a view assume uma forma específica, e se for para bloquear mesmo, pode user um filtro (?) ou o seu próprio framework de segurança.

Mas ainda sobre ele só poder acessar a view pelo botão, qual seria o problema de ir pela URL? Você depende de alguma carga de dados para a tela de cadastro ficar pronta para uso e esta carga só ocorre na ação do botão? 

Se a resposta para a pergunta anterior for sim, use view-action e navegue normalmente carregando a tela no momento em que ela for acessada.

Qualquer duvida, veja no projeto do webBudget como as navegações entre as tela ocorrem e os parâmetros são passados.

at.,
Reply all
Reply to author
Forward
0 new messages