2017-10-09 32 views
0

不能理解<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

另外,我覺得這是非常重要的:在我選擇的任何值,頁面刷新,並再次成爲默認的「全部」值。

+0

也許你使用的是錯誤的範圍;我們無法看到,因爲您從bean定義中刪除了該部分。 – ujulu

+0

是的,我發現我使用錯誤的範圍,它應該是「SESSION」而不是當前的「STATELESS」。但我無法將ScopeType更改爲SESSION,因爲它會在我的代碼中導致許多其他錯誤。 – ABL

+0

有什麼方法可以結合?現在我有@Scope(ScopeType.STATELESS) – ABL

回答

0

你真的想發送整個表單嗎(做一個表單提交)?

試試這個,應該是沒有刷新頁面:

<h:form id="tasks"> 

    <h:selectOneMenu value="#{services.selectedItem}"> 
     <f:selectItems value="#{services.selectItems}" /> 
     <f:ajax execute="@this" render="result"/> 
    </h:selectOneMenu> 

    <h:outputText id="result" value="#{services.selectedItem}"/> 
</h:form> 
0

@ujulu是正確的,我創建單獨的Java類@Scope(ScopeType.SESSION)和我的形式位於錯誤的地方,我把它的層次越高,擺脫任何父母組件。現在它起作用了。

+0

那麼下一次你創建一個真正的[mcve],所以everthing是直接可見的? – Kukeltje