É 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)"/>
Cara, não entendi o que vc quer fazer… poderia exemplificar de outro modo?
certo vamos la:
tenho um componente composto chamado botão:
[code]<?xml version='1.0' encoding='ISO-8859-1' ?>
<!-- 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>
[/code]
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:
[code]<?xml version='1.0' encoding='ISO-8859-1' ?>
<!-- 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>
[/code]
sei la algo desse tipo ±?
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.
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.
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.
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.
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
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