1

Ajax と JSF 2.0/primeface を使用して単純なドロップダウン ボックスを作成しようとしています。最初のドロップダウンの選択に基づいて、AJAX 呼び出しを使用して 2 番目のドロップダウン ボックスにデータが入力されます。

最初のドロップダウンを選択すると、Ajax 呼び出しに基づいて 2 番目のドロップダウン ボックスが正しく設定されました。しかし、2番目のドロップダウンで選択して{基本的に何らかのアクションのためにフォームを送信する}ボタンをクリックすると、「formViewBusinessCode:selectedBusinessCode: Validation Error: Value is not valid」というエラーメッセージが表示されます

コンソールにチェックインすると、「selectedBusinessCode」{Id of second dropdown} の値が null であると表示されます。正しく入力されているので困惑していますが、選択後にのみ値が無効であるというエラー (基本的に null) が表示されます。選択した値が Bean に到達していないのはなぜですか? 誰かが私がここで欠けているものを指摘できますか、TIA

xhtmlコードは以下の通りです

<h:outputText styleClass="outputText" value="#{constant.businessCodeGroup}"></h:outputText>
<h:selectOneMenu id="selectedBusinessCodeGroup" value="#{viewBusinessCodeBean.selectedBusinessCodeGroup}" >
    <f:selectItem itemValue="SELCT" itemLabel="Select Business Code Group" />
    <f:selectItems value="#{viewBusinessCodeBean.businessCodeGroupList}" />
    <p:ajax listener="#{viewBusinessCodeBean.getOnlyBusinessCodeListByAjaxCall}" event="change" update="selectedBusinessCode" process="@this"/>
</h:selectOneMenu> 

<h:outputText styleClass="outputText" value="#{constant.businessCode}"></h:outputText>
    <h:selectOneMenu id="selectedBusinessCode" value="#{viewBusinessCodeBean.selectedBusinessCode}">
    <f:selectItem itemValue="SELCT" itemLabel="Select Business Code" />
    <f:selectItems value="#{viewBusinessCodeBean.businessCodeList}" itemLable="#{viewBusinessCodeBean.businessCodeList.getlable}"
    itemValue="#{viewBusinessCodeBean.businessCodeList.getValue}" />
</h:selectOneMenu>

<h:commandButton value="View" action="#{viewBusinessCodeBean.getOnlyBusinessCodeDescription}"></h:commandButton>

beanコーディングは以下の通りです。それは @ManagedBean です

最初のドロップダウン ボックスに入力するには

public ViewBusinessCodeBean() {
    logger.entering(CLASS_NAME);
    this.businessCodeGroupList = new ArrayList<SelectItem>();
    List<String>tempBusinessCodeList = new BusinessCodeTableServices().getBusinessCodeGroupList();
    Iterator<String>iterator = tempBusinessCodeList.iterator();
    while(iterator.hasNext()){
        String businessCodeGroup = iterator.next();
        logger.debug(businessCodeGroup);
        SelectItem item = new SelectItem(businessCodeGroup);
        businessCodeGroupList.add(item);
    }
    logger.exiting(CLASS_NAME);
}

2 番目のドロップダウンに入力する Ajax Call メソッド

public void getOnlyBusinessCodeListByAjaxCall() {
    this.businessCodeList = new ArrayList<SelectItem>();
    List<String>tempBusinessCodeList = new BusinessCodeTableServices().getOnlyBusinessCodeList(getSelectedBusinessCodeGroup());
    Iterator<String>iterator = tempBusinessCodeList.iterator();
    while(iterator.hasNext()){
        String businessCode = iterator.next();
        SelectItem item = new SelectItem(businessCode,businessCode,businessCode);
        businessCodeList.add(item);
    }   
}
4

1 に答える 1

0

あなたのBeanは明らかにリクエストスコープにあります。リクエスト スコープ Bean は、すべてのプロパティがデフォルトに設定されたリクエストごとに再構築されます。フォーム送信の処理リクエスト中にbusinessCodeListプロパティが /empty になったため、検証エラーが発生しました。null

Bean をビュー スコープに配置すると、この問題が解決するはずです。

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

于 2013-02-22T12:38:45.527 に答える