动态SelectOneListBox在进程上验证失败

时间:2013-10-07 22:33:20

标签: ajax jsf primefaces

我有一个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包含一个“Items”列表,值是selectedItem,它也是一个“Item”所以我看不出我哪里出错了。

1 个答案:

答案 0 :(得分: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 post传递的id中获取对象(我选择在转换器中执行此操作)。