[JSF] Setar um valor para um Bean via h:commandLink (Básica)

7 respostas
F

Colegas;
Saudações!

Tenho a seguinte expressão em minha página jsf:

<h:commandLink value="#{mov.usuNome}" action="loginRep"></h:commandLink>

Gostaria que quando fosse clicado no link acima o bean “#{usuario.UsuLogin}” fosse prenchido com o conteúdo do link : “#{mov.usuNome}”

Só para completar, caso seja necessário, esse link vêm de uma h:dataTable:

<h:dataTable styleClass="tabela" headerClass="cabecalho" columnClasses="ultimo,primeiro" value="#{Usuario.consMetaVend}" var="mov">
                                                                    <h:column><f:facet name="header"><h:outputText value="Representante:" /></f:facet>
                                                                    <h:commandLink value="#{mov.usuNome}" action="loginRep"></h:commandLink></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="AA:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdAA}"/></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="MA2:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdMa2}"/></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="MA1:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdMa1}"/></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="MA:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdMa}"/></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="Meta:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdMeta}"/></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="Real:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdReal}"/></h:column>
                                                                </h:dataTable>

Poderiam me dar algumas dicas de como fazer isso?

PS: Não tenho muita experiência com JSF, na verdade estou começando ainda!

Antecipadamente agradeço;

Marco Aurélio

7 Respostas

georgesq

use o f:param e envie ao seu MB o que deseja.

[s]
baiano

F

Olá George;

Obrigado pela dica. Poderia me dar um exemplo prático? Não tenho muita intimidde com o JSF.

Estou fazendo assim:

<h:commandLink value="#{mov.usuNome}" action="loginSupRep"><f:param  id="getUsuSup" name="getUsuSup" value="#{Usuario.usuSup}"/></h:commandLink></h:column>

Estou pretendendo valorizar o “#{Usuario.usuSup}” com o conteúdo do link, ou seja, o “#{mov.usuNome}”

Obrigado novamente!

Marco A.

F

Pessoal, nesses últimos dias venho quebrando a cabeça para conseguir, mas está difícil.
Sou novato e porisso gostaria de contar com a ajuda dos colegas. Sei que posso estar pedindo demais, mas é por necessidade de aprendizado mesmo e não por comodismo.

Gostaria de um exemplo que se encaixasse com minha realidade, tenho ainda dificuldade em assimilar os nomes e utilizar corretamente os comando. Ex: actionListener, etc.

Vou detalhar o que preciso, desde já agradeço a atenção e apoio!

Tenho um bean: Usuário e este bem tem uma propriedade usuNomeRep (mudei o nome tá?).
Nesta classe java eu tenho o set desta propriedade:

public void setUsuNomeRep(String usuNomeRep) {
        this.usuNomeRep = usuNomeRep;
    }

O conteúdo do usuNomeRep só será preenchido em determinada página, inicialmente ele está em branco (null).

Na página consMetaSup.jsp eu tenho um h:dataTable e uma das colunas deste dataTable é que será o conteúdo do usuNomeRep. Onde atualmente está o f:param e que estou tentando setar o valor do bean.

<h:dataTable styleClass="tabela" headerClass="cabecalho" columnClasses="ultimo,primeiro" value="#{Usuario.consMetaVend}" var="mov">
                                                                    <h:column><f:facet name="header"><h:outputText value="Representante:" /></f:facet>
                                                                    <h:commandLink value="#{mov.usuNome}" action="loginSupRep"><f:param name="usuNomeRep" id="usuNomeRep" value="#{mov.usuNome}"/></h:commandLink></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="AA:"/></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdAA}"><f:convertNumber type="number" maxIntegerDigits="6"/></h:outputText></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="MA2:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdMa2}"><f:convertNumber type="number" maxIntegerDigits="6"/></h:outputText></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="MA1:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdMa1}"><f:convertNumber type="number" maxIntegerDigits="6"/></h:outputText></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="MA:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdMa}"><f:convertNumber type="number" maxIntegerDigits="6"/></h:outputText></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="Meta:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdMeta}"><f:convertNumber type="number" maxIntegerDigits="6"/></h:outputText></h:column>
                                                                    <h:column><f:facet name="header"><h:outputText value="Real:" /></f:facet>
                                                                    <h:outputText value="#{mov.metaVendQtdReal}"><f:convertNumber type="number" maxIntegerDigits="6"/></h:outputText></h:column>
                                                                </h:dataTable>

Neste link aparece o nome de todos os representantes que possuem uma determinada meta. A idéia é que quando o usuário clicar no link com o nome do representante, seja direcionado para outra página onde eu iria executar uma query com os produtos do representante que havia no link. Para isso, creio eu, preciso ter o nome do representante no bean para que eu possa enviar para a query.

Espero poder contar com a ajuda dos colegas!

Forte abraço à todos!

Marco Aurélio

felipeguerra

Por que vc não cria um campo hidden e seta o que quiser nele?

Tipo assim:

<h:hidden id="teste" value="seuBean.suaPropriedade" />

<script>
function setaValorNoTeste(valor) {
  document.getElementById("seuForm:teste").value = valor;
}
</script>

Aí no Backing Bean é só manipula-lo!

B

Utilize setPropertyActionListner que popula o valor diretamente no atributo no seu bean.

Ex.1:

<h:commandLink value="link"> <f:setPropertyActionListener target="#{venda.estoque.produto.idProduto}" value="#{ajproduto.idProduto}"/> </h:commandLink>

Um outra solução mais interessante ainda seria em vez de usar commandLink, utilizar richfaces: a4j:support para disparar quaisquer eventos via ajax e popular diretamente um atributo no seu bean.
Ex:2

<a4j:support event="onselect" action="#{venda.selByCode}"reRender="cor" > <f:setPropertyActionListener target="#{venda.estoque.produto.idProduto}" value="#{ajproduto.idProduto}"/> <f:setPropertyActionListener target="#{venda.estoque.produto.precoVenda}" value="#{ajproduto.precoVenda}"/> </a4j:support>

rponte

Isso pode te ajudar,

A lógica é a mesma seja com ou sem Ajax4jsf/Richfaces.
Abraços!

Kamikaze

<h:commandLink actionListener="#{companyListBean.sortByColumn}"> <h:outputText value="#{companyListBean.companyColumnTitle}" escape="false" /> <f:param name="column" value="name" /> </h:commandLink>

Criado 10 de janeiro de 2008
Ultima resposta 10 de jan. de 2008
Respostas 7
Participantes 6