2012-12-17 14 views
5

ich eine Managed Bean in ViewScope Modus. Wenn ich also eine Aktion von dieser Managed Bean anrufe, wird meine Seite nicht aktualisiert. Ich sehe, dass meine Aktion gut aufgerufen wird und Null zurückgibt (viewscope Workflow ist OK).JSF ViewScope - Rückkehr null auf Aktionen nicht aktualisiert die Ansicht

Also, was mache ich falsch?

Wenn ich die Seite mit Ajax rerender es funktioniert gut.

EDIT:

Meine Versionen sind:

JSF 2.1.14 mit Primefaces 3.4.1

Mein Code:

@ManagedBean(name = "test") 
@ViewScoped 
public class TestMB implements Serializable { 
    private String status; 

    public String getStatus() { return this.status; } 
    public void setStatus(String status) { this.status = status; } 

    public String changeStatus() { 
     this.status = "ViewScope Works!"; 
     return null; 
    } 

} 

Meine Seite:

<!DOCTYPE HTML> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:p="http://primefaces.org/ui" 
       template="/template/ui.xhtml"> 
    <ui:define name="head"> 
    </ui:define> 
    <ui:define id="teste" name="content"> 
     <h:form id="form"> 
      <h:outputText id="status" value="OK?: #{test.status}" /> 
      <p:commandButton id="myAction" value="Do it!" action="#{test.changeStatus}" /> 
     </h:form> 
    </ui:define> 
</ui:composition> 

Auf meinem s chreen, die Statusvariable nicht ändern. Und, ja .. die Aktion heißt OK. Ein Tipp?

+0

das Offensichtliche zu vermeiden, wird diese Aktion von Ajax oder nicht aufgerufen? Sie rufen also die Aktion mit Ajax auf, aber nicht mit Ajax? – BalusC

+0

Nicht. Ich versuche es auf zwei Arten: Normal und Von Ajax. Normal funktioniert nicht. Durch Ajax/render die Komponentenansicht, funktioniert gut. Ich sehe auf Firebug, dass die HTML-Antwort OK unterstützt (durch normalen Aufruf), aber die VIEW auch nicht aktualisieren/aktualisieren. – abyteneverlie

+0

Zeigen Sie den Code im Geschmack eines SSCCE. Wie wird die Vorbereitung, dass für JSF, unsere JSF Wiki-Seite http://stackoverflow.com/tags/jsf/info – BalusC

Antwort

8

Sie wurden mit <p:commandButton> das Formular abzuschicken. Es sendet standardmäßig eine Ajax-Anfrage. Es aktualisiert standardmäßig nichts. Das Verhalten, das Sie beobachten, wird somit voll erwartet. Es gibt mehr Möglichkeiten, dieses „Problem“ zu lösen (zitiert, wie es eigentlich kein Problem ist, sondern nur ein konzeptionelles Missverständnis):

  1. Sagen Sie sich nicht Ajax verwenden.

    <p:commandButton ... ajax="false" /> 
    
  2. Sagen Sie es, um das Formular zu aktualisieren.

    <p:commandButton ... update="@form" /> 
    
  3. Ersetzen durch Standard-JSF-Komponente, die Ajax nicht standardmäßig verwenden.

    <h:commandButton ... /> 
    

Beachten Sie, dass dieses konkrete Problem der Ansicht Umfang in keinem Zusammenhang selbst ist. Sie hätten genau das gleiche Problem (mit genau den gleichen Lösungen), wenn Sie einen anderen Bereich verwenden, einschließlich des Anforderungsbereichs.