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);
}
}