Use JSF During development, it is hard to avoid Session Scope Of Mbean For these Bean , We want it to be retained during operations on the same page and cleared during page Jump. This article introduces an automatic Session .
1.First, addSessionUsed to record the original pageUri,CodeAs follows:
<%
Session. setattribute ("pagefrom", request. getrequesturi ());
%>
2.AddFilter, Intercept allJSFSessionProcessing:Web. xmlAdd the following code:
sessionguard
sessionguard
net. moon. filter. sessionguardfilter
the key of sessions want to keep to next page, others
will be delete
keepsessionkeys
userid; pageid; COM. sun. faces. logicalviewmap; COM. sun. faces. application. statemanagerimpl. serialid; javax. faces. request. charset
sessionguard
*. JSF
Where,Com. Sun. Faces. logicalviewmap; com. Sun. Faces. application. statemanagerimpl. serialid; javax. Faces. Request. charsetIsJSFSaved statusSession, Must be retained.
3.WriteSessionguardfilterTo determine whether the request page is the current page. If notSessionThe Code is as follows:
Package net. Moon. filter;
Import java. Io. ioexception;
Import java. util. arraylist;
Import java. util. enumeration;
Import java. util. List;
Import java. util. stringtokenizer;
Import javax. servlet. filter;
Import javax. servlet. filterchain;
Import javax. servlet. filterconfig;
Import javax. servlet. servletexception;
Import javax. servlet. servletrequest;
Import javax. servlet. servletresponse;
Import javax. servlet. http. httpservletrequest;
Import javax. servlet. http. httpsession;
Public class sessionguardfilter implements filter {
Private list <string> keepsessionkeys = new arraylist <string> ();
Public void destroy (){
// Todo auto-generated method stub
}
@ Suppresswarnings ("unchecked ")
Public void dofilter (servletrequest request, servletresponse response,
Filterchain) throws ioexception, servletexception {
// Todo auto-generated method stub
Httpservletrequest hrequest = (httpservletrequest) request;
Httpsession session = hrequest. getsession ();
// Delete useless sessions when change page
If (! (Hrequest. getrequesturi (). Replace (". JSF", ". jsp"). Equals (Session
. Getattribute ("pagefrom ")))){
Enumeration <string> en = session. getattributenames ();
While (EN. hasmoreelements ()){
String key = en. nextelement ();
If (! Keepsessionkeys. Contains (key )){
Session. removeattribute (key );
}
}
}
}
Public void Init (filterconfig) throws servletexception {
// Todo auto-generated method stub
Stringtokenizer ST = new stringtokenizer (filterconfig
. Getinitparameter ("keepsessionkeys "),";");
While (St. hasmoretokens ()){
Keepsessionkeys. Add (St. nexttoken ());
}
}
}