首先,請原諒我的無知和無法使用搜索引擎(我發誓我搜索了很長時間,但經常沒有找到任何令人滿意的答案)。將actionListener方法傳遞給組件內的命令按鈕
我有實現操作偵聽器兼容的方法一個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組件(如果是,如何)?
所以,我希望有一個可能的解決方案來解決改變上述策略的一般問題,或者使用一些不錯的和不同的東西(通常我不喜歡使用任何黑客或變通辦法,但喜歡使用意圖由框架)。
謝謝,如果有人會找到時間指點我!如果這個問題已經存在,將很高興去相關的文章,並刪除這個。
謝謝Nikita!這似乎是一個很好的方法來做到這一點!無論如何,我有一些問題,實際上將方法傳遞給組件,意味着什麼時候通過'myAction =「#{myBean.myAction}」'它總是搜索_attribute_不是爲了方法,爲了調試我試過'myAction =「 #{myBean.myAction(event)}「',並且調用傳遞給方法,是的!但是,在'myAction(ActionEvent event){''event'爲null ...任何想法,如果我可以從表達式上下文訪問/傳遞'event'?不管怎麼說,還是要謝謝你! – 2012-04-27 12:18:39
檢查http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/composite/actionSource.html。你可以嘗試添加''然後像這樣使用:' ' –
2012-04-27 15:44:03