É possivel passar eventos com parametros para componentes compostos em jsf?

8 respostas
W

É possivel passar eventos com parametros para componentes compostos em jsf?

por exemplo tenho meu metodo

public void teste(Object texto) { ... }

E meu componente composto com o seguinte atributo:

<cc:attribute name="action" method-signature="java.lang.String action()"/>

tem alguma coisa que possa fazer isso funcionar? tipo:

<cc:attribute name="action" method-signature="java.lang.String action(Object o)"/>

8 Respostas

fabiomedeirosf

Cara, não entendi o que vc quer fazer… poderia exemplificar de outro modo?

W

certo vamos la:

tenho um componente composto chamado botão:

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:cc="http://java.sun.com/jsf/composite"
      xmlns:a4j="http://richfaces.org/a4j">

    <!-- INTERFACE -->
    <cc:interface>
	<cc:attribute name="action" method-signature="java.lang.String action()"/>
	<cc:attribute name="render" default="@form"/>
    </cc:interface>

    <!-- IMPLEMENTATION -->
    <cc:implementation>
            <a4j:commandButton value="Botao" action="#{cc.attrs.action}" render="#{cc.attrs.render}" />
    </cc:implementation>
</html>
tenho no meu managedBean o seguinte metodo:
public void teste() {  
...  //faz algo aqui
}

e chamo esse componente na minha pagina jsf:

<util:botao action=#{managedBean.teste}/>
Assim ele funciona perfeitamente, agora queria saber se tem como esse metodo teste ter parametros tipo:
public void teste(Object o) {  
...  //faz algo aqui
}
e na minha pagina:
<util:botao action=#{managedBean.teste(alguma coisa)}/>
e no meu componente composto:
<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:cc="http://java.sun.com/jsf/composite"
      xmlns:a4j="http://richfaces.org/a4j">

    <!-- INTERFACE -->
    <cc:interface>
	<cc:attribute name="action" method-signature="java.lang.String action(Object o)"/>
	<cc:attribute name="render" default="@form"/>
    </cc:interface>

    <!-- IMPLEMENTATION -->
    <cc:implementation>
            <a4j:commandButton value="Botao" action="#{cc.attrs.action(o)}" render="#{cc.attrs.render}" />
    </cc:implementation>
</html>

sei la algo desse tipo +-?

fabiomedeirosf

O que vc consegue pegar como parametro, seria o prório evento, ai chamaria um actionListener.

Mas como vc quer é tipo atribuir o valor de um id, qdo algum evento for acionado, pode fazer assim:

  • criar o atributo no MB que receberá este parâmetro;
  • no evento que necessitar vc chama o método que deverá ser executado action="#{seuMB.metodo}"
  • no seu método, vc lê o atributo.

espero que tenha conseguido exigir.

W

Então o problema é exatamente este de receber este parametro porque todos o atributo de componentes do campo tipo value ja estão passando parametros então queria um metodo para passar outro parametro alem deste.

fabiomedeirosf

Tem alguns modos:
<f:param />
<f:setTargetProperty> // ou algo assim

No primeiro, vc terá que pegar o parâmetro pelo FacesContext…
No segundo modo, vc já atribui direto o parâmetro, se nao me enganho existe a propriedade target que será o nome do atributo no seu MB e a propriedade value (valor que será atribuido).

Dê uma olhada, acho que resolverá seu problema.

W

Aí esta outro problema quando eu usava o a4j:support do jsf1.2 eu utilizava f:setTargetProperty e funcionava perfeitamente agora no jsf 2.0 como uso o a4j:ajax o f:setPropertyActionListener não funciona pq o tipo do componente a4j:ajax não da suporte para ele e o f:param tbm não funciona, por isso mesmo que queria um jeito de passar um metodo com parametros, mas valeu pela ajuda.

fabiomedeirosf

Cara, já tentou o <f:ajax> nativo do JSf2?

Acho que pode ter algo… já o usei… mas nao lembro extamente pra qual situaçao… dê uma olhada de repente rs

W

Então eu ja tinha tentando algo com ele mas tinha dado algum erro não lembro qual acho q por misturar o f:ajax com componentes richfaces , mas vou tentar denovo alguma coisa vai q da certo, valeu

Criado 9 de maio de 2011
Ultima resposta 9 de mai. de 2011
Respostas 8
Participantes 2