1

変更.xhtml

                <table border="0" align="left" cellpadding="10" cellspacing="0">
                 <tr>   
                    <td>通訊地址 : </td>
                    <td><p:selectOneMenu value="#{modify.comAddressContry}" style="width: 120px">
                            <f:selectItem itemLabel="--選擇城市--" itemValue="--選擇城市--"/>
                            <f:selectItems value="#{modify.tw.country_map}"/>
                            <p:ajax update="district_change_com"  event="change" listener="#{modify.com_country_change()}"/>
                        </p:selectOneMenu>
                    </td>
                    <td><p:selectOneMenu id="district_change_com" value="#{modify.comAddressDistrict}" style="width: 120px">
                            <f:selectItem itemLabel="--選擇地區--" itemValue="--選擇地區--" />
                            <f:selectItems value="#{modify.tw.district_map}"/>
                            <p:ajax update="com_all" listener="#{modify.com_zipcode_change()}"/>
                        </p:selectOneMenu>                          
                    </td>
                    <td><p:inputText id="com_all" value="#{modify.comAddressAll}" style="width: 300px"/></td>
                    <td>通訊地電話 : </td>
                    <td><p:inputText value="#{modify.houseAddressTel}" maxlength="11" /></td>
                </tr>
                <tr>   
                    <td>戶籍地址 :</td>
                    <td><p:selectOneMenu value="#{modify.houseAddressContry}" style="width: 120px">
                            <f:selectItem itemLabel="--選擇城市--" itemValue="--選擇城市--"/>
                            <f:selectItems value="#{modify.tw.country_map}"/>
                            <p:ajax update="district_change"  event="change" listener="#{modify.country_change()}"/>
                        </p:selectOneMenu>
                    </td>
                    <td><p:selectOneMenu id="district_change" value="#{modify.houseAddressDistrict}" style="width: 120px">
                            <f:selectItem itemLabel="--選擇地區--" itemValue="--選擇地區--" />
                            <f:selectItems value="#{modify.tw.district_map}"/>
                            <p:ajax update="house_all" listener="#{modify.zipcode_change()}"/>
                        </p:selectOneMenu>                          
                    </td>
                    <td><p:inputText id="house_all" value="#{modify.houseAddressAll}" style="width: 300px"/></td>
                    <td>戶籍地電話 : </td>
                    <td><p:inputText value="#{modify.houseAddressTel}" maxlength="11" /></td>
                </tr>
            </table>

PrimeFaces でダブルコンボ選択機能を試しています。一度使用するとうまくいきますが、同じページ(同じフォーム)で2回使用すると、選択したデータを送信するとページに検証エラーが表示されます。この問題に対するアイデアはありますか?

4

1 に答える 1

1

これは、Bean がリクエスト スコープであり、HTTP リクエストごとに再作成される場合に発生する可能性があります (すべての ajax リクエストも個別の HTTP リクエストとしてカウントされることに注意してください)。送信するたびに、JSF は送信されたドロップダウン値を使用可能なアイテムのリストに対して検証します。ただし、Bean がリクエストスコープの場合、このリストは毎回デフォルトに再初期化されます。したがって、カスケード ドロップダウン リストのデフォルトの初期化リストが、ユーザーがフォームを送信した時点の正しいリストを表していない場合、「検証エラー: 値が無効です」というメッセージが表示されます。

Bean をビュー スコープに配置して、同じビューと対話している限り、また ajax リクエストによって存続するようにすると、問題が解決するはずです。

@ManagedBean
@ViewScoped
public class Modify {
    // ...
}

以下も参照してください。

于 2012-10-25T11:04:15.727 に答える