Como passar parâmetros recebido em modalPanel do RichFaces?

154 views
Skip to first unread message

Marcelo Gomes

unread,
Sep 16, 2015, 9:15:07 AM9/16/15
to javasf: JavaServer Faces Group

Tenho a seguinte situação. Estou usando o modalPanel do Rich Faces 3.3.3. Neste modal recebo alguns parâmetros

<a4j:actionparam id="rh-cpf" name="rhCpf" value="#{obj.cpf }" />

No modalPanel consigo exibir a informação normalmente:

<h:outputLabel value="#{param.rhCpf}" /> <== Quando exibo na página, é exibido normalmente

Ao tentar passar este valor como parâmetro, o valor está indo nulo.

<a4j:commandLink value="Salvar" styleClass="btn btn-success"> <a4j:support event="oncomplete" action="#{atividadeController.atualizarItemAnalise(param.rhCpf, param.id)}" <== chegam como nulo como senão existissem!!!! ajaxSingle="true"> </a4j:support>  

</a4j:commandLink>

Como devo passar estes parâmetros para que o Bean receba as informações que estão na página?

Henrique Neto

unread,
Sep 16, 2015, 9:46:08 AM9/16/15
to jav...@googlegroups.com
Marcelo,

pq vc ta usando um A4J support dentro de um A4J CommandLink? O proprio componente ja possui um atributo "onComplete". Não sei se isso teria impacto mas faz o teste.

Att.,
Henrique Neto
Graduado em Análise e Desenvolvimento de Sistemas
Pós-Graduando em Engenharia de Software
LPIC-1 -  ID: LPI000243620 Verification: tmlvhgun7h
Oracle Certified Java Programmer 6
"Dizem que o tempo muda tudo, mas não é verdade. Fazer coisas é que muda
algo, não fazer nada deixa as coisas do jeito que estão."
Gregory House


--
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 http://groups.google.com/group/javasf.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/54f16f01-6716-4baa-b7dc-a8637f31c9bc%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Marcelo Gomes

unread,
Sep 16, 2015, 9:50:29 AM9/16/15
to javasf: JavaServer Faces Group
Henrique
Fiz a alteração, mas o problema continua.
Ele não está reconhecendo o "param.rhCPF" quando tento passar na action.

Henrique Neto

unread,
Sep 16, 2015, 10:29:44 AM9/16/15
to jav...@googlegroups.com
Marcelo,

acredito que seja por estar usando ajax ele não submeta os parametros da sessão (Suposição).
Testa assim:

Criar um atributo rhCpf na tua controller (com get e set) e no xhtml faz assim:

<a:commandLink .....>
             <f:setPropertyActionListener target="#{atividadeController.rhCpf}" value="#{param.rhCpf}" />
</a:commandLink >

Att.,
Henrique Neto
Graduado em Análise e Desenvolvimento de Sistemas
Pós-Graduando em Engenharia de Software
LPIC-1 -  ID: LPI000243620 Verification: tmlvhgun7h
Oracle Certified Java Programmer 6
"Dizem que o tempo muda tudo, mas não é verdade. Fazer coisas é que muda
algo, não fazer nada deixa as coisas do jeito que estão."
Gregory House


Rafael Ponte

unread,
Sep 16, 2015, 10:35:01 AM9/16/15
to jav...@googlegroups.com
Olá,

Pelo que entendi você está tentando repassar os parâmetros do 1o request em um 2o request. Isso não é possível, pois os dados dentro de #{param.*} só sobrevivem a uma requisição. Você teria que mantê-los em um input-hidden ou managed bean para próxima requisição.

Uma maneira de resolver isso poderia ser pensando em como trocar mensagens (dados) entre managed beans, como comentado no artigo abaixo:

http://www.rponte.com.br/2009/08/27/managed-beans-nao-complique-simplifique/

O managed bean do modal poderia estar em um escopo maior que request ou mesmo manter os parâmetros dentro de inputs hidden.

Olha se ajuda!


Para mais opções, acesse https://groups.google.com/d/optout.
--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

Marcelo Gomes

unread,
Sep 16, 2015, 12:11:40 PM9/16/15
to javasf: JavaServer Faces Group
Eu alterei e criei um MB exclusivo para o modalPanel.
No caso para usar os inputs-hidden, como eu faria para atribuir os valores e depois recuperá-lo no bean?
O MB da página normal é request, e o MB do modal "session".

<h:inputHidden value="#{param.rhCpf}"/> <= atribuo o valor ao hidden

No caso eu atribuo o valor do param no input-hidden e depois como associá-lo ao meu atributo no bean?

Rafael Ponte

unread,
Sep 16, 2015, 12:48:03 PM9/16/15
to javasf: JavaServer Faces Group
Oi,

Ao abrir o modal você passa os parâmetros para o bean do modal. Dai dentro do form do modal você coloca os h:inputHiddens apontando para alguma propriedade do bean do modal.

Assim você consegue manter o bean do modal em @RequestScoped também. Se a coisa for mais complicada você pode mantê-lo em @ViewScoped.

Um abraço!

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

Marcelo Gomes

unread,
Sep 16, 2015, 2:11:25 PM9/16/15
to javasf: JavaServer Faces Group
Rafael

Meu projeto tem restrição do uso do JSF 1.2

Quando vc comenta em passar os parâmetros ao abrir o modal (parametros => bean do modal), onde faço isso? Existe algum atributo que posso fazer esta amarração.

No Bean eu tentei pegar o request mas vem nulo. Quando exibe o conteúdo da página o parametro está ok e com valores, mas ao pegar no Bean está nulo

Fiz assim no Bean:

public String salvar() {
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest req = (HttpServletRequest) fc.getExternalContext().getRequest();
        cpf = req.getParameter("id-cpf");
        dossie = req.getParameter("dossie");
logger.info("Dados recebidos CPF : " + cpf);
logger.info("Dossiê : " + dossie);
return null;
}

Henrique Neto

unread,
Sep 16, 2015, 2:30:58 PM9/16/15
to jav...@googlegroups.com
Marcelo,

costumo usar o modal como um xhtml separado. Então faço da seguinte forma:


<ui:include src="MODAL.XHTML" >  <!-- Caminho relativo do xhtml do modal -->
<ui:param name="titulo" value="#{param.titulo}" />
</ui:include>


e no meu modal eu faço:


<rich:modalPanel>
 <f:facet name="header">
<h:outputText value="{titulo}"></h:outputText>
 </f:facet>

</rich:modalPanel>


Não sei se o Rafael Ponte tem uma sugestão melhor.





Att.,
Henrique Neto
Graduado em Análise e Desenvolvimento de Sistemas
Pós-Graduando em Engenharia de Software
LPIC-1 -  ID: LPI000243620 Verification: tmlvhgun7h
Oracle Certified Java Programmer 6
"Dizem que o tempo muda tudo, mas não é verdade. Fazer coisas é que muda
algo, não fazer nada deixa as coisas do jeito que estão."
Gregory House


Henrique Neto

unread,
Sep 16, 2015, 2:31:30 PM9/16/15
to jav...@googlegroups.com
Corringindo:


<rich:modalPanel>
 <f:facet name="header">
<h:outputText value="#{titulo}"></h:outputText>
 </f:facet>

</rich:modalPanel>

Att.,
Henrique Neto
Graduado em Análise e Desenvolvimento de Sistemas
Pós-Graduando em Engenharia de Software
LPIC-1 -  ID: LPI000243620 Verification: tmlvhgun7h
Oracle Certified Java Programmer 6
"Dizem que o tempo muda tudo, mas não é verdade. Fazer coisas é que muda
algo, não fazer nada deixa as coisas do jeito que estão."
Gregory House


Henrique Neto

unread,
Sep 16, 2015, 2:31:49 PM9/16/15
to jav...@googlegroups.com
Corrigindo**

Rafael Ponte

unread,
Sep 16, 2015, 2:56:35 PM9/16/15
to jav...@googlegroups.com
Oi Henrique,

Sua solução também funciona bem. A única diferença da proposta que dei é que você solucionou dentro da página (view) enquanto eu sugeri resolver no managed bean

De qualquer forma, a idéia que sugeri basicamente é abrir o modal com base numa ação disparada da tela para o lado servidor através de um botão ou outro evento... algo como abaixo:

<p:commandButton valeu="Abrir modal" action="#{modalBean.abrir(bean.param1, param.valorXpto)}" update="pnlModal"/>

Daí no managed bean ModalBean você recebe os parâmetros, guarda em algum propriedades, limpa o formulário no lado servidor e prepara o modal para exibição (até aí tudo bem, nada de muito novo!). Daí para garantir que os parâmetros enviados ao modal continuem nas próximas requisições você pode manter estado no lado cliente através de input-hiddens dentro do formulário do modal. Algo como:

<h:form id="modalForm">
    <h:inputHidden value="#{modalBean.prop1}" />
    <h:inputHidden value="#{modalBean.prop2}" />
</h:form>

Deu para entender?

Enfim, existe N formas, eu só sugeri uma com base na comunicação entre managed beans enquanto o Henrique sugeriu outra que dependendo do caso pode até ser mais simples de implementar.

Um abraço!



On Wed, Sep 16, 2015 at 3:31 PM Henrique Neto <rnphenr...@gmail.com> wrote:
Corrigindo**

--
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 http://groups.google.com/group/javasf.

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

Marcelo Gomes

unread,
Sep 16, 2015, 5:28:27 PM9/16/15
to javasf: JavaServer Faces Group
Rafael e Henrique

Muito obrigado pela ajuda.

Segui o exemplo do Rafael e deu certo!

Tive que refatorar a jsf mas deu certo!

Valeu mesmo

Abraços

Marcelo
Reply all
Reply to author
Forward
0 new messages