1

Seam オブジェクトのリスト プロパティにアタッチされている が取り込まれてい<h:selectOneListbox>ます。<s:selectItems>これが私の(簡略化された)JSFコードです:

<a4j:outputPanel ajaxRendered="true" id="valuesListPanel">
    <table border="0" cellspacing="5">
        <tr><td rowspan="5">
        <h:selectOneListbox id="pickValue" value="#{seamObject.selectedValue}">
            <s:selectItems value="#{seamObject.propertyValues}" var="properties" label="#{properties}" />
        </h:selectOneListbox>
        </td>
        <td><a4j:commandButton value="Move Up"
                  action="#{seamObject.moveUp}"/></td></tr>
        <tr><td><a4j:commandButton value="Move Down" action="#{seamObject.moveDown}"/></td></tr>
     </table>
 </a4j:outputPanel>

Seam オブジェクトの moveUp および moveDown メソッドは、バッキング リストで選択された項目を見つけ、それを上または下に移動します。

私が抱えている問題は次のとおりです。これらのボタンのいずれかをクリックすると、AJAX 要求が通過し、バッキング オブジェクトが変更されます。ただし、リストは更新されません。ただし、これらのボタンのいずれかを 2 回目にクリックすると、前の変更がリスト ボックスに反映されます。

したがって、1 つの項目を「下に移動」しても、変化は見られません。ただし、別のアイテムを「上に移動」すると、そのアイテムには何も起こりませんが、以前に下に移動したかったアイテムは下に移動します。

別の AJAX リクエストを強制することでこれをハッキングすると、「うまくいきます」。

どうすればこれを機能させることができますか? 問題にアプローチするより良い方法はありますか?

4

2 に答える 2

2

使用していない特別な理由はありますrich:orderingListか?リストの注文は、まさにそれが意図していることです。

あなたがそれをすることができないならば、何をa4j:log言いますか?パネルは再レンダリングされますか?はいの場合、どのデータを使用しますか?

于 2011-03-08T23:25:13.247 に答える
1

最終的に、両方の a4j:commandButtons に immediate="true" を配置しました。これは、リストボックスの onchange イベントに AJAX 呼び出しを配置することと組み合わせて (サーバーが選択された項目を認識できるようにするため)、望ましい動作を実現しました。きれいではありませんが、機能します。これ以上多くの時間を費やす余裕はありません。

于 2011-03-09T19:11:47.127 に答える