2017-10-09 4 views
0

Kann verstehen <h:selectOneMenu> Komponente. Ich habe versucht, Parameter aus dem Dropdown-Menü an Java zu übergeben und vier verschiedene Methoden, um die Java-Methode aufzurufen. Die ersten beiden Möglichkeiten (onchange und Command tut Aufruf java) anderen beiden der Fall ist, aber funktioniert schlecht, wie es selectedItem auf Java Variable kippe:JSF - h: selectOneMenu Setter wird niemals

<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> 

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

kehrt null in der Konsole :

14:41:51,897 INFO [STDOUT] SelectedItem - null 

aber ich kann output der Wert ist immer „Alle“ und in der Konsole sehe ich jedes Mal, wenn getSelectedItem Methode aufgerufen wird sehen, dass:

14:41:49,087 INFO [STDOUT] getSelectedItem All

Außerdem glaube ich, ist es sehr wichtig ist: nachdem ich wähle alle Werte, Seite aktualisiert und es wird standardmäßig ‚All‘ Wert wieder.

+0

Wahrscheinlich verwenden Sie einen falschen Bereich; wir können nicht sehen, weil Sie diesen Teil aus der Bean-Definition ausgeschnitten haben. – ujulu

+0

Ja, ich habe herausgefunden, dass ich falsches Scope verwende, es sollte "SESSION" anstelle von "STATELESS" sein. Aber ich kann ScopeType nicht zu SESSION ändern, weil es viele andere Fehler in meinem Code verursacht. – ABL

+0

gibt es eine Möglichkeit zu kombinieren? jetzt habe ich @Scope (ScopeType.STATELESS) – ABL

Antwort

0

Wollen Sie wirklich das ganze Formular senden (Formular absenden)?

dies versuchen, sollte es keine Aktualisierung der Seite sein:

<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 hatte recht, ich mit @Scope(ScopeType.SESSION) und meine Form separaten Java-Klasse erstellt wurde bei falschen Stelle befindet, bewegt ich es höher in der Hierarchie, zu Entfernen Sie alle übergeordneten Komponenten. Und es funktioniert jetzt.

+0

Also das nächste Mal, wenn Sie eine echte [mcve] im Voraus erstellen, so dass alles direkt sichtbar ist? – Kukeltje

Verwandte Themen