不能理解<h:selectOneMenu>
組件。嘗試了很多方法將參數從下拉列表傳遞給java,以及4種不同的方式來調用java方法。前兩種方式(平變化和命令按鈕犯規調用Java)另外兩個呢,但工程作爲嚴重它不能設置selectedItem設置Java變量:JSF - h:selectOneMenu安裝程序不會調用
<h:form id="tasks">
<h:selectOneMenu id = "selectonemenu" value="#{services.selectedItem}"
immediate="true" onchange="javascript: return this.form.submit();">
<f:selectItems value="#{services.selectItems}" />
</h:selectOneMenu>
<h:commandButton value = "StringHello" action="#{services.StringHelo}" />
<s:link action="#{services.StringHello}" reRender="tasks"></s:link>
<a:commandLink id="aclink"
action="#{services.StringHello}"
ajaxSingle="true" eventsQueue="globalQueue"
ignoreDupResponses="true" requestDelay="0"
onComplete="return false;"
status="globalStatus">
aclink
</a:commandLink>
<h:outputText id = "valueofselected" value = "#{services.selectedItem}"/>
</h:form>
而且Services.Java:
private String selectedItem;
public String getSelectedItem() {
if (selectedItem == null) {
selectedItem = "All"; // This will be the default selected item.
}
System.out.println("getSelectedItem "+selectedItem);
return selectedItem;
}
public void setSelectedItem(String selectedItem) {
this.selectedItem = selectedItem;
System.out.println("setSelectedItem");
}
public List getSelectItems() {
List selectItems = new ArrayList();
selectItems.add(new SelectItem("All", "All"));
selectItems.add(new SelectItem("A", "A"));
selectItems.add(new SelectItem("B", "B"));
selectItems.add(new SelectItem("C", "C"));
selectItems.add(new SelectItem("D", "D"));
System.out.println("getSelectItems: "+selectItems.size());
return selectItems;
}
public void StringHello(){
System.out.println(" SelectedItem - "+selectedItem);
}
回報控制檯空:
14:41:51,897 INFO [STDOUT] SelectedItem - null
,但我可以看到的outputText的值始終爲「所有」,並在控制檯中我看到每次當getSelectedItem方法被調用時:
14:41:49,087 INFO [STDOUT] getSelectedItem All
另外,我覺得這是非常重要的:在我選擇的任何值,頁面刷新,並再次成爲默認的「全部」值。
也許你使用的是錯誤的範圍;我們無法看到,因爲您從bean定義中刪除了該部分。 – ujulu
是的,我發現我使用錯誤的範圍,它應該是「SESSION」而不是當前的「STATELESS」。但我無法將ScopeType更改爲SESSION,因爲它會在我的代碼中導致許多其他錯誤。 – ABL
有什麼方法可以結合?現在我有@Scope(ScopeType.STATELESS) – ABL