JSF: Como obter o componente a partir do qual é chamada a propriedade do rendered

13 respostas
Rodrigo_Manhaes

Bom dia!

Estou tentando resolver um problema em JSF e uma solução simples e limpa seria se eu pudesse, no getter da propriedade indicada no atributo rendered de um <h:commandLink>, identificar o link que disparou a chamada ao getter.

Alguém sabe se há como fazer isto?

13 Respostas

CintiaDR

Não entendi exatamente sua dúvida. Mas talvez no context, no request vc tenha alguma solução. Por exemplo, no HttpServletRequest, tem uns métodos como path, URL que foi requerida, etc. No ViewRoot, são informações mais “JSF”, então sei lá…

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest req = (HttpServletRequest) context
				.getExternalContext().getRequest();

String viewId = context.getViewRoot().getViewId()
Rodrigo_Manhaes

Olá Cintia!

Obrigado pela atenção. Vou explicar com mais detalhes.

Eu tenho um commandLink, por exemplo:

<h:commandLink value="Go!!" action="#{bean.go}" rendered="#{bean.ok}"/>

Quando for o momento de o JSF renderizar o componente, o método isOk() será executado no managed bean. A minha pergunta é se existe possibilidade de, no método bean.isOk(), eu conseguir obter o UICommand referente ao <h:commandLink> em questão (imagine que eu tenho vários command links, todos com rendered="#{bean.ok}" e quero saber de qual veio a chamada, pois a resposta (true ou false) depende disto.

under_fire

Rodrigo Manhães:
Olá Cintia!

Obrigado pela atenção. Vou explicar com mais detalhes.

Eu tenho um commandLink, por exemplo:

<h:commandLink value="Go!!" action="#{bean.go}" rendered="#{bean.ok}"/>

Quando for o momento de o JSF renderizar o componente, o método isOk() será executado no managed bean. A minha pergunta é se existe possibilidade de, no método bean.isOk(), eu conseguir obter o UICommand referente ao <h:commandLink> em questão (imagine que eu tenho vários command links, todos com rendered="#{bean.ok}" e quero saber de qual veio a chamada, pois a resposta (true ou false) depende disto.

Eu to procurando isso a um tempão …
Isso seria muito show…
Se tivesse algum modo pratico sem te que implementar um biding… do componente…

CintiaDR

Rodrigo Manhães:
Olá Cintia!

Obrigado pela atenção. Vou explicar com mais detalhes.

Eu tenho um commandLink, por exemplo:

<h:commandLink value="Go!!" action="#{bean.go}" rendered="#{bean.ok}"/>

Quando for o momento de o JSF renderizar o componente, o método isOk() será executado no managed bean. A minha pergunta é se existe possibilidade de, no método bean.isOk(), eu conseguir obter o UICommand referente ao <h:commandLink> em questão (imagine que eu tenho vários command links, todos com rendered="#{bean.ok}" e quero saber de qual veio a chamada, pois a resposta (true ou false) depende disto.

Não, não conheço… :frowning:

R

Rodrigo, se tiver encontrado uma solução “bonita” ou não, por favor poste, pois estou com o mesmo problema.

desde já agradeço.

fabio.massa

Rodrigo,
Não sei se é o que precisa, mas se você criar uma propriedade no seu bean do tipo “HtmlCommandLink” e der um binding no seu “commandLink”, você consegue pegar o id desse link quando o método bean.isOk() for acionada.

Abraços,

javax.skol

fabio.massa:
Rodrigo,
Não sei se é o que precisa, mas se você criar uma propriedade no seu bean do tipo “HtmlCommandLink” e der um binding no seu “commandLink”, você consegue pegar o id desse link quando o método bean.isOk() for acionada.

Abraços,


How about <h:inputHidden name=“formOk” value=“veioDoFormOK” /> !??! e na action vc pegaria pelo nam.
é “deselegante” mais acho que funcionaria…
=]

R

Fabio, vc poderia ser mais claro na solução que propos ? Se puder postar um trecho de código, ajudaria baestante… :lol:

maurenginaldo
Como o Fábio citou:
<h:commandLink value="Go!!" action="#{bean.go}" rendered="#{bean.ok}" binding="#{bean.meuComponente}" />  

public class Bean {

    private javax.faces.component.html.HtmlCommandLink meuComponente;

    //get e set

}

Dessa forma você está linkando o seu componente no seu Bean ao componente no Jsf, tudo que for feito em um reflete no outro.

vanilton.coelho

Mais ai dependendo da quantidade de componentes, teriam muitos e muitos bindings.

fabio.massa

rogeriorobetti é isso mesmo que o maurenginaldo postou, valeu marenginaldo!

alpharagga qual o problema de ter muitos bindings?, estou lhe questionando pois estou estudando JSF, apesar de encontrarmos muitas coisa sobre, é sempre bom aprender mais. Se puder esclarecer essa dúvida eu agradeço muito.

Abraços,

vanilton.coelho

Se a quantidade de páginas sempre aumentar, consequentemente a quantidade de componentes que precisam do bindings para que esse esquema funcione??? como fica nesse caso??? teria que ser algo que fosse transparente para o managed bean.

maurenginaldo

Não vejo problema para esse tipo de solução, nessa situação para se ter controle do componente do lado do bean a forma de resolver é essa.

Criado 20 de maio de 2008
Ultima resposta 13 de out. de 2008
Respostas 13
Participantes 8