1

私は奇妙な問題に直面しています、私はah:selectOneListbox:のフォームを持っています

<h:selectOneListbox value="#{webHostingServicesActions.customPackage.storage}" size="1">
    <f:selectItem itemLabel="None" itemValue="#{null}" />
    <f:selectItems value="#{webHostingServicesActions.storagesChoices}" var="item" itemLabel="#{item.name}" />
    <f:converter converterId="productConverter" />
    <a4j:ajax event="valueChange" render="lblTotal" />
</h:selectOneListbox>

f:selectItemsから1つのアイテムを選択すると、セッターwebHostingServicesActions.customPackage.storageが呼び出されません。しかし、f:selectItemからアイテムを選択すると、セッターが正しく呼び出されます。

もちろん、私はカスタムコンバーターを使用していますが、テストされ、正しく応答します。

f:selectItemsのアイテムが選択されると、フォーム内の他のすべてのajaxアクションがブロックされているように見えます。サーバー側でエラーは発生しません。また、デバッグでa4j:logを使用する場合もエラーは発生しません。

編集1 : f:selectItemsからアイテムを選択すると、リクエスト値を適用するサーバー側のコードが実行されますが、セッターの前のどこかでブロックされます。何が起こっているのかを確認するのに十分な距離をたどることができませんでした。

編集2:BalusCLifeCycleListenerを追加しました...

f:selectItemからアイテムを選択すると

START PHASE RESTORE_VIEW 1
END PHASE RESTORE_VIEW 1
START PHASE APPLY_REQUEST_VALUES 2
END PHASE APPLY_REQUEST_VALUES 2
START PHASE PROCESS_VALIDATIONS 3
END PHASE PROCESS_VALIDATIONS 3
START PHASE UPDATE_MODEL_VALUES 4
END PHASE UPDATE_MODEL_VALUES 4
START PHASE INVOKE_APPLICATION 5
END PHASE INVOKE_APPLICATION 5
START PHASE RENDER_RESPONSE 6
END PHASE RENDER_RESPONSE 6

f:selectItemsからアイテムを選択すると

START PHASE RESTORE_VIEW 1
END PHASE RESTORE_VIEW 1
START PHASE APPLY_REQUEST_VALUES 2
END PHASE APPLY_REQUEST_VALUES 2
START PHASE PROCESS_VALIDATIONS 3
END PHASE PROCESS_VALIDATIONS 3
START PHASE RENDER_RESPONSE 6
END PHASE RENDER_RESPONSE 6

valueChangeの代わりに変更もテストしましたが、何も違いはありませんでした。

助けてくれてありがとう!

アレクサンドル。

4

1 に答える 1

2

今私は解決策を見つけました、私はh:selectOneListboxでコンバーターを使用することについて誤解していました。私は、コンバーターを使用してオブジェクトをf:selectItemsから変換したり、その逆を行ったりできると考えていました。

コードを少し元に戻しました:

<h:selectOneListbox value="#{webHostingServicesActions.selectedStorage}" size="1">
    <f:selectItem itemLabel="Aucun" itemValue="#{null}" />
    <f:selectItems value="#{webHostingServicesActions.storagesChoices}" var="item" itemLabel="#{item.name}" itemValue="#{item.keyProduct}" />
    <f:converter converterId="integerConverter" />
    <a4j:ajax event="valueChange" render="lblTotal" />
</h:selectOneListbox>

これで、セッターselectedStorageは、オブジェクトProductの代わりに整数を受け取ります。すべてが期待どおりに機能します。

kolossusが私を正しい方向に導いてくれて、この投稿に感謝します:<f:selectItems>のitemValueとしてのオブジェクト

于 2012-11-07T06:37:27.240 に答える