2016-05-17 26 views
0

我有一個@ViewScoped wordController CDI bean。它有一個方法addWord(),它將變量currentWord添加到List。它沒有AJAX可以正常工作,但只要我包含f:ajax,變量currentWordaddWord()方法中始終爲空。 ajax與JSF一起工作的方式有一些我不明白。這裏出了什麼問題?JSF Ajax調用時,變量設置爲空

<h:form id="saveForm" styleClass="form"> 
    <h:inputText value="#{wordController.currentWord}" id="words" /> 
    <h:commandButton action="#{wordController.addWord()}" type="submit" value="+"> 
     <f:ajax render="wordlist" /> 
    </h:commandButton> 
    <h:panelGroup id="wordlist"> 
.... 

回答

4

f:ajax默認爲execute="@this"(在這種情況下等於該commandButton),所以不執行的inputText(≈提交)。這就是爲什麼它在行動中爲空。只需添加

<f:ajax execute="@form" render="wordlist" /> 

到執行整個表格,或

<f:ajax execute="@this words" render="wordlist" /> 

僅執行的inputText和按鈕 - 萬一有你不想提交更多inputcomponents。

在後一種情況下,您需要@this,因爲沒有它只會執行words,因此不會是commandButton,因此不會執行操作。

Here的更多閱讀。

+1

我從來沒有聽說過。非常感謝! – user1156544