私は3つのコンボボックスを持っています。最初のものには値が入力されます。そこから値を選択すると、2番目の値を更新する必要があります。その後、2番目のコンボから値を選択すると、3番目のコンボが入力されます。私はこれがすでに伝達されていることを知っていますが、2つのコンボがあります。2つ以上では機能しません。私がきちんとやらなかったことを教えてください。
ビューは次のとおりです。
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Choose the produce type:"/>
<h:selectOneMenu id="firstList"
value="#{userBean.firstItem}"
valueChangeListener="#{userBean.valueChanged}">
<f:selectItems value="#{userBean.firstList}"
var="element"
itemLabel="#{element.label}"
itemValue="#{element.value}" />
<a4j:support reRender="outputPanel"
event="onchange"
ajaxSingle="true"
bypassUpdates="false" />
</h:selectOneMenu>
<a4j:outputPanel id="outputPanel">
<h:selectOneMenu value="#{userBean.secondItem}"
valueChangeListener="#{userBean.valueChanged}">
<f:selectItems value="#{userBean.secondList}"
var="element"
itemLabel="#{element.label}"
itemValue="#{element.value}" />
<a4j:support reRender="outputPanel"
event="onchange"
ajaxSingle="true"
bypassUpdates="false" />
</h:selectOneMenu>
<h:selectOneMenu value="#{userBean.thirdItem}"
valueChangeListener="#{userBean.valueChanged}">
<f:selectItems value="#{userBean.thirdList}"
var="element"
itemLabel="#{element.label}"
itemValue="#{element.value}" />
</h:selectOneMenu>
</a4j:outputPanel>
</h:panelGrid>
</h:form>
これはBeanです(これは意味のある意味のないサンプルコードです):
@Name("userBean")
public class UserBean
{
@Logger private Log log;
@In StatusMessages statusMessages;
private String firstItem="";
private String secondItem="";
private String thirdItem="";
public List<SelectItem> firstList = new ArrayList<SelectItem>();
public List<SelectItem> secondList = new ArrayList<SelectItem>();
public List<SelectItem> thirdList = new ArrayList<SelectItem>();
private static final String [] FRUITS = {"Banana", "Cranberry", "Blueberry", "Orange"};
private static final String [] VEGETABLES = {"Potatoes", "Broccoli", "Garlic", "Carrot"};
private static final String [] GIRLS = {"Victoria", "Nana", "Etc.."};
public UserBean() {
SelectItem item = new SelectItem("fruits", "Fruits");
firstList.add(item);
item = new SelectItem("vegetables", "Vegetables");
firstList.add(item);
item = new SelectItem("girls", "Girls");
firstList.add(item);
for (int i = 0; i < FRUITS.length; i++) {
item = new SelectItem(FRUITS[i]);
}
}
public List<SelectItem> getFirstList() {
return firstList;
}
public List<SelectItem> getSecondList() {
return secondList;
}
public List<SelectItem> getThirdList() {
return thirdList;
}
public static String[] getFRUITS() {
return FRUITS;
}
public static String[] getVEGETABLES() {
return VEGETABLES;
}
public static String[] getGIRLS() {
return GIRLS;
}
public void valueChanged(ValueChangeEvent event){
String[] currentItems;
String id = ((HtmlSelectOneMenu)event.getSource()).getId();
if (id.equals("firstList")) {
currentItems = FRUITS;
for (int i = 0; i < currentItems.length; i++) {
SelectItem item = new SelectItem(currentItems[i]);
secondList.add(item);
}
thirdList.clear();
} else {
currentItems = GIRLS;
for (int i = 0; i < currentItems.length; i++) {
SelectItem item = new SelectItem(currentItems[i]);
thirdList.add(item);
}
}
}
public String getFirstItem() {
return firstItem;
}
public void setFirstItem(String firstItemArg) {
firstItem = firstItemArg;
}
public String getSecondItem() {
return secondItem;
}
public void setSecondItem(String secondItemArg) {
secondItem = secondItemArg;
}
public String getThirdItem() {
return thirdItem;
}
public void setThirdItem(String thirdItemArg) {
thirdItem = thirdItemArg;
}
問題は、2番目のコンボボックス(値が動的にロードされた)から値を選択すると、ページが再ロードされ(ajaxリクエストが実行される代わりに)、例外が発生することです。
要求処理中の例外:メッセージ「java.util.NoSuchElementException」を伴うjavax.servlet.ServletExceptionが原因です
2番目のリストは最初のリストから正常に更新されていますが、その後に問題が発生しています。
前もって感謝します!乾杯!