返回首页
当前位置: 主页 > 编程语言 > JAVA教程 >

freeMarker Jfinal 获取session里的值

时间:2016-10-26 22:12来源:电脑教程学习网 www.etwiki.cn 编辑:admin

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>

------分隔线----------------------------
标签(Tag):java java技巧 java实例教程 java源代码 java基础教程
------分隔线----------------------------
推荐内容
猜你感兴趣