h:selectOneMenu的提交值在后备bean中显示为null

时间:2019-05-20 08:26:38

标签: jsf

我已经将下拉菜单与简单对象一起使用,并且始终运行良好。现在,我无法完成这项工作:

我跟随this渲染了下拉列表:

<h:selectOneMenu id="referenced" value="{myController.book}" immediate="true">
    <f:selectItems value="#{myController.allBooks}" 
                   var="b" itemValue="#{b}" itemLabel="#{b.title}" />
</h:selectOneMenu>
<h:commandButton action="#{myController.addBook()}" type="submit" value="Add">
    <f:ajax render="booklist" />
</h:commandButton>

标题正确显示。但是,当我单击Add按钮时,对象标题始终为null:

protected Book book = new Book();
....

public void addBook() {
        if (book != null) {
            System.out.println("adding book " + book.getTitle()); // Always null
        }
}

我认为那是因为无法“传递”对象,所以我使用了omnifaces

<h:selectOneMenu id="referenced" value="{myController.book}" immediate="true" converter="omnifaces.SelectItemsConverter"> 

该对象仍然为null。然后,我尝试遵循this advice并在ajax元素中使用侦听器:

<f:ajax listener="#{myController.changeBook}" execute="referenced" event="change" />

(我尝试使用和不使用event属性)。接收AjaxBehaviorEvent的方法内部的结果仍然相同。

0 个答案:

没有答案