2011-10-22 59 views
0

我想,當一個用戶點擊按鈕2的事情發生了:使用兩個JSF Ajax和setPropertyActionListener標籤

  1. 首先一個setPropertyActionListener被觸發,來更新我的Bean的屬性
  2. 然後一個AJAX調用,以從bean執行的方法

看來,我必須在f:setPropertyActionListener標籤和f:ajax標籤T之間進行選擇嵌套在commandButton標籤中。

有沒有辦法同時執行ajax調用和屬性更新?

非常感謝!

編輯:我忘了提,我不想要一個表單執行,我想使用AJAX聽衆,這裏是我的代碼:

<h:commandLink styleClass="blue-button" value="+"> 
    <f:setPropertyActionListener target="#{tvShowForm.selected}" value="#{tvShow.externalId}" /> 
    <f:ajax event="click" listener="#{tvShowForm.add}" /> 
</h:commandLink> 

有了這個代碼不執行f:setPropertyActionListener

編輯2:

我修改代碼到如下因素,使用動作形式方法而不是聽衆。現在只有當我沒有在ajax標籤上指定一個事件屬性時,它才起作用,但是當我指定一個時,action方法不會被執行。

<h:commandLink action="#{tvShowForm.add}" styleClass="blue-button" value="+"> 
    <f:setPropertyActionListener target="#{tvShowForm.selected}" value="#{tvShow.externalId}" /> 
    <f:ajax event="click" /> 
</h:commandLink> 
+0

他們會。具體問題是什麼? – BalusC

回答

2

僅適用於Tomcat 7.0.19和Glassfish 3.1.1上的Mojarra 2.1.3。

我用這個相關片的視圖:

與此相關的片的bean的:

private String value; 

public void submit() { 
    System.out.println("Value: " + value); 
} 

// Getter/setter. 

其打印在AJAX以下提交:

價值:foo

您的問題是由您忽略了問題的其他問題引起的。


更新:根據您的更新

我忘了說我不想要一個表單執行,我想使用AJAX聽衆,這裏是我的代碼:

我真的不明白爲什麼你不想要「表單執行」。您提交表格時,你的。您只是省略了操作方法,而是在ajax事件監聽器中執行業務工作。動作監聽器方法不適合做任何商業工作,它們最適合於一些自包含的處理或日誌記錄工作。依賴於模型的業務工作應該在行動方法中完成,就在那裏。

+0

謝謝。我忘了說我正在嘗試使它在單擊事件上與ajax監聽器一起工作。在這種情況下,f:setPropertyActionListener不會被執行。 – kgautron

+0

我只是將我當前的代碼添加到問題中。 – kgautron

+0

它被執行,但僅在** ajax偵聽器方法之後**。只需使用'action'方法即可。另請參閱答案更新。 – BalusC