0

我有一个 selectOneListBox 和一个按钮

<p:selectOneListbox id="somelistBox" value="#{bean.selectedItem}" styleClass="listBox">
    <f:selectItems value="#{bean.list}" var="item" itemValue="#{item}" itemLabel="#{preparer.prepare(item)}"/>
</p:selectOneListbox>
<p:commandButton id="somebutton" process="@(.listBox)" update="@(.listBox)"/>

和一颗豆子

@Component
public void class Bean
{
    private List<Item> list;

    private Item selectedItem;

    public List<Item> getList()
    {
        return list;
    }

    public void getSelectedItem()
    {
        return selectedItem;
    }

    public void setSelectedItem(Item selectedItem)
    {
        this.selectedItem = selectedItem;
    }
}

但是,当我按下按钮时,在 ajax 发布期间 selectOneListBox 上的验证失败。根据我的阅读,当您尝试使用错误类型的对象设置 bean 中的绑定对象时,可能会发生这种情况,但是我的 selectOneListBox 包含一个“项目”列表,并且该值是 selectedItem 也是一个“项目”所以我看不出哪里出错了。

4

1 回答 1

0

我认为我的问题源于对浏览器如何工作的误解。他们不知道 java 对象,只是字符串,因此试图在浏览器和服务器之间来回传递对象是不可能的。相反,我已将项目值更改为项目的 id,然后必须通过数据库调用在后端检索此对象,即

<p:selectOneListbox id="somelistBox" value="#{bean.selectedItem}" styleClass="listBox">
    <f:selectItems value="#{bean.list}" var="item" itemValue="#{item.id}" itemLabel="#{preparer.prepare(item)}"/>
</p:selectOneListbox>

然后在后端调用以从 ajax 帖子传递的 id 中获取对象(我选择在 Converter 中执行此操作)。

于 2013-10-08T18:07:41.630 回答