Ajax 动态SelectOneListBox无法验证进程

Ajax 动态SelectOneListBox无法验证进程,ajax,jsf,primefaces,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:select

我有一个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;
    }
}
@组件
公共空类Bean
{
私人名单;
私有项目selectedItem;
公共列表getList()
{
退货清单;
}
public void getSelectedItem()
{
返回selectedItem;
}
公共无效设置selectedItem(项目selectedItem)
{
this.selectedItem=selectedItem;
}
}

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

我想我的问题是因为对浏览器工作原理的误解。他们不知道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中获取对象(我选择在转换器中执行此操作)。

我以前从未见过类似的
@(.listBox)
。当您仅使用
process=“somelistBox”
时,它是否有效?另外:你能告诉我们你得到的确切错误吗?它是一个选择器;selectOneListBox的样式为“listBox”,我没有收到错误,按钮上的操作不起作用,listBox呈红色发光;然后,post显示验证失败