【发布时间】:2012-04-27 09:27:46
【问题描述】:
首先,请原谅我的无知和无能,所以请使用搜索引擎(我发誓我已经搜索了很长时间并且经常搜索,但没有找到任何令人满意的答案)。
我有一个实现动作监听器兼容方法的 bean:
@ManagedBean(name = "myBean")
@ViewScoped
class Bean{
public String myAction(ActionEvent event){
... = event.getComponent().getAttributes().get("something");
}
}
然后,我有一个这样的 jsf 组件:
<composite:interface>
<composite:attribute name="actionBean" required="true"/>
<composite:attribute name="actionMethod" method-signature="void myAction(javax.faces.event.ActionEvent)" />
</composite:interface>
<composite:implementation>
<h:form>
<p:commandButton actionListener="#{cc.attrs.actionBean[cc.attrs.actionMethod]}">
<f:attribute name="something" value="somevalue" />
</p:commandButton>
</h:form>
</composite:implementation>
它是这样称呼的:
<namespace:myComponent actionBean="#{myBean}" actionMethod="myAction" />
我知道这个调用不起作用,我想知道如何正确地做!
我的主要意图是我想要一个相对通用的 jsf 组件(以后可以重用它会很好),它包含一个按钮。单击此按钮时,我想传递一个对象(不是简单的字符串!如果是字符串,我将使用action="..." 并通过f:param 传递它)。使用actionListener 方法,我通过event.getComponent().getAttributes().get("something") 获取对象。
我认为签名void myAction(javax.faces.event.ActionEvent) 是破坏将相关方法传递给组件的问题,不是吗?通常是否可以将带有任何参数的方法传递给 jsf 组件(如果可以,如何)?
所以,我希望有一个可能的解决方案来解决改变上述策略的一般问题,或者使用一些好的和不同的东西(一般来说,我不喜欢使用任何黑客或变通方法,但喜欢使用框架)。
如果有人能找到时间给我指路,谢谢!如果这个问题已经存在,最好访问相关帖子并将其删除。
【问题讨论】:
标签: jsf jsf-2 composite-component