2012-04-11 10 views
0

Ich habe ähnliche Frage gesehen, aber ich denke nicht, es ist ein Repost, weil ich auf die ManagedBean von WebFilter zugreifen kann, aber seltsamerweise die aktualisierte Eigenschaft .... ist nicht wirklich aktualisiert. Hier sind die Details:SessionScoped Managed Bean Wert nicht von Servlet Filter geändert

Ich habe einen Filter, der das tut (mit Mojarra 2.1.6 auf 3.1.2 Glassfish, WebFilter Anmerkung):

public void doFilter(ServletRequest request, ServletResponse response, 
       FilterChain chain) 
     throws IOException, ServletException { 
    // FacesContextHelper is a utility class to get some Faces stuff 
    FacesContextHelper facesContextHelper = new FacesContextHelper(); 
    // this returns the correct instance of a SessionScoped ManagedBean 
    userInfoView = (UserInfoView) facesContextHelper.getManagedBean(request, 
     response, "userInfoView", UserInfoView.class); 
    // ... some computation here to get the 'vm' URL parameter 
    userInfoView.setViewMode(viewMode); 
    // .... 
    chain.doFilter(request, response); 
} 

Jetzt in einem Facelet, ich bin mit diesem viewMode:

<h:panelGroup layout="block" rendered="#{userInfoView.viewMode ne 1}"> 
    <ui:include src="/WEB-INF/jsf/v2/products.xhtml"/> 
</h:panelGroup> 

aus Gründen der Vollständigkeit ist hier eine partielle UserInfoView:

@ManagedBean(name = "userInfoView") 
@SessionScoped 
public class UserInfoView extends AbstractView 
    implements ServiceConstant, Serializable { 
private Integer viewMode = 0; 

public Integer getViewMode() { 
    return viewMode; 
} 

public void setViewMode(Integer viewMode) { 
    this.viewMode = viewMode; 
} 
} 

Nun, was passiert ist, dass aus irgendeinem Grund (es scheint mit der JSESSIONID verknüpft) Ich werde das erwartete Verhalten haben:
- mit der "vm = 1" in der GET-Anfrage setzt den viewMode auf 1
- erhält der Facelet den entsprechenden Wert

Dann einfach Glassfish Neustart und:
- mit dem "vm = 1" in der GET-Anfrage STILL Sets (rufen Sie die UserInfoView setViewMode) die viewmode bis 1
- die Facelet erhält den Wert --default ** (d. H 0)

Ich vermute, dass die RESTORE_VIEW Phase irgendwie die Variablen auf die Standardeinstellung zurücksetzt, wenn ich diese Theorie habe nichts zu unterstützen anderen als den Lebenszyklus der Anfragen Tracing ...

Gibt es etwas, das ich sollte beim Ändern einer Variablen einer SessionScoped-verwalteten Bean aus einem Servlet-Filter beachtet werden? Irgendetwas stimmt nicht in meinem Ansatz?

Antwort

1

nicht die Antwort auf Ihr Problem, aber da Sie JSF 2 verwenden, eine bessere Möglichkeit, diese Parameter zu übergeben verwendet:

<f:viewParam name="vm" value="userInfoView.viewMode"/> 
+0

ich an dieser Option aussehen. Es könnte ein besserer Weg sein als das, was ich weiß (den Request-Parameter direkt im getViewMode des Bean holen) – JScoobyCed

Verwandte Themen