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 からオブジェクトを取得します (コンバーターでこれを行うことにしました)。

于 2013-10-08T18:07:41.630 に答える