我有一個關於將ActionListener委託給複合組件(jsf)的具體問題。 我創建了一個複合組件來顯示(瀏覽)並編輯任何個人用戶數據(屬性「user」)。ActionListener不在複合組件中觸發
<body>
<co:interface>
<co:attribute name="editAction" required="false" targets="edit" method-signature="java.lang.String f()"/>
<co:attribute name="saveAction" required="false" targets="save" method-signature="java.lang.String f()"/>
<co:attribute name="cancelAction" required="false" targets="cancel" method-signature="java.lang.String f()"/>
<co:attribute name="isBrowseModus" required="true"/>
<co:attribute name="user" required="true"/>
<co:attribute name="isDeveloper" required="true"/>
<co:actionSource name="edit"/>
<co:actionSource name="save"/>
<co:actionSource name="cancel"/>
</co:interface>
............
<p:inplace id="inpLand" editor="true"
toggleable="#{not cc.attrs.isBrowseModus}"
style="#{cc.attrs.isBrowseModus ? 'color: black' : 'color: blue'}">
<p:inputText value="#{cc.attrs.user.land}" label="text"/>
</p:inplace>
...........
<c:if test="#{cc.attrs.isBrowseModus}">
<h:commandButton id="edit" value="Edit"/>
</c:if>
........
實際上這個複合部件是通過調用myData.xhtml的圖稱爲:
<ui:define name="center">
<h3>MyData Developer </h3>
<h4>Welcomne</h4>
<h:form id="dataForm">
<mc:UserData user="#{dataBean.user}" isDeveloper="#{dataBean.developer}" isBrowseModus="#{dataBean.browseModus}" cancelAction="#{dataBean.cancel}"
saveAction="#{dataBean.save}" editAction="#{dataBean.edit}">
<f:actionListener for="edit" binding="#{dataBean.editActionListener}"/>
</mc:UserData>
</h:form>
</ui:define>
</ui:composition>
在複合部件有一個(ID =編輯)和遞送的ActionListener(見F: myData中的actionListener)應該綁定到這個commandButton(id = edit)。這是我閱讀不同的論壇討論和幾個文件後的理解。
不幸的是editActionListener方法在單擊Edit-Button之後不會觸發,我不知道爲什麼。
public void editActionListener(ActionEvent ae) {
browseModus = false;
FacesContext.getCurrentInstance().renderResponse();
}
什麼是我的目標: 在該複合材料部件,用戶可以通過點擊「編輯」按鈕更改 這肯定editActionListener方法managedBean「公司Databeans」(myData.java)中存在任何用戶數據。我更喜歡使用PRIMEFACES的就地標籤。點擊編輯按鈕後,所有可更改的字段應以藍色顯示。
我的問題:
- 任何人可以解釋我爲什麼有界editActionListener方法 不解僱?
- 通常,這是將 「isBrowseModus」屬性設置爲正確的方法(單擊編輯按鈕後爲false)?還是有更方便的方法來達到這個結果?
- 我正在使用primefaces,第一次嘗試使用p:commandButton, ,但不幸的是它不起作用。在使用p:commandButton時,單擊編輯按鈕後會發生異常。在我的managedBean (PropertyNotFoundException)中,JSF找不到 editActionListener方法?!?!?
任何幫助將不勝感激。提前謝謝了。 問候, 博多
這可能會幫助:http://stackoverflow.com/questions/8423096/jsf2-0-composite-component-actionlistener – 2013-02-25 15:13:54