进行 JSF Ajax 调用时变量设置为 null

Variable is set to null when JSF Ajax call is made

我有一个 @ViewScoped wordController CDI bean。它有一个方法 addWord() 可以将变量 currentWord 添加到 List。它在没有 AJAX 的情况下工作正常,但是一旦我包含 f:ajax,变量 currentWordaddWord() 方法中始终为 null。在 ajax 使用 JSF 的过程中,我遗漏了一些东西。这里出了什么问题?

<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">
....

f:ajax 默认为 execute="@this"(在本例中等于 commandButton),因此不执行 inputText(≈ 提交)。这就是为什么它在操作中为 null 的原因。只需添加

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

执行整个表格,或

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

仅执行 inputText 和按钮 - 以防有更多您不想提交的输入组件。

在后一种情况下,您需要 @this,因为没有它,只有 words 会执行,因此不会执行 commandButton,因此不会执行操作。

Here阅读更多