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 中的双重组合选择功能。当我使用它一次时效果很好,但是当我在同一个页面(以相同的形式)中使用它两次时,当我提交所选数据时页面显示验证错误。对这个问题有什么想法吗?

4

1 回答 1

1

如果 bean 是请求范围的,因此会在每个 HTTP 请求上重新创建(注意每个 ajax 请求也算作一个单独的 HTTP 请求),则可能会发生这种情况。每次提交时,JSF 都会根据可用项目列表验证提交的下拉值。但是,如果 bean 是请求范围的,则此列表将每次都重新初始化为默认值。因此,如果级联下拉列表的默认初始化列表不代表用户提交表单时的正确列表,那么您将收到“验证错误:值无效”。

将 bean 放置在视图范围内,这样只要您与同一个视图交互(也通过 ajax 请求),它就会存在,应该可以解决问题。

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

也可以看看:

于 2012-10-25T11:04:15.727 回答