freeMarker Jfinal 获取session里的值
问题:freeMaker session取值的常用格式都试过 session["xxx"],session.xxx 直接xxx 都取不出来?????
解决:
JFinal与Struts2不同,在使用Freemarker作为View的时候,没有自动将session传送至页面使用,原因很简单,为了遵 循restful。如果在项目中使用了session,那么集群就不太方便了,需要想办法对session进行同步才可以。所以JFinal默认是不会去 生成session对象让开发者去使用的。 即便如此,开发者可以通过使用拦截器来轻松添中session到view中使用,JFinal新版本中已经提供了SessionInViewInterceptor来支持这种需求
也可以自己写一个Interceptor即可:
/**
* 拦截器
* @author Axhack
*
*/
public class PublicInterceptor implements Interceptor {public void intercept(Invocation ai) {
//向freemarker中传jsp的内置对象
Controller c = ai.getController();
c.setAttr("request", c.getRequest());
c.setAttr("response", c.getResponse());
c.setAttr("session", new HttpSessionHashModel(c.getSession(), FreeMarkerRender.getConfiguration().getObjectWrapper()));
ai.invoke();
}
}
在登录或注册的
Controller
类 前加代码
@Before(PublicInterceptor.class)调用即可:
例如:
@Before(PublicInterceptor.class)
@ControllerBind(controllerKey = "PersonalCenter", viewPath = "/")
public class PersonalCenterController extends BaseController {
public void personal() {//登录
PersonalCenterDataResult dataResult = service.register(username, password, pcName, pcPhone, pcAddress, pcIDCard);
setSessionAttr("PERSONALCENTER",dataResult.getPersonalcenter());
render("personal.html");
}}
然后页面
<#if session['PERSONALCENTER']??>
${session['PERSONALCENTER'].username}
</#if>
本文原创,转载必追究版权。