freeMarker Jfinal 获取session里的值

1548年前Jfinal6329

问题: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>

相关文章

java实现根据ip定位地理位置(调用百度接口)

这里用的是若依的springboot框架,框架里自带的获取地理位置接口是调用的淘宝的,已经不可用。于是找到哦百度接口实现。调用百度接口:http://api.map.baidu.com/locatio...

MyEclipse 中项目修改SVN的地址

MyEclipse 中项目修改SVN的地址

在工作环境调整时,有的时候SVN服务器的地址需要修改,而正在开发中的项目在Eclipse中有些代码没有提交,此时怎么修改SVN的地址呢?以下有一个简单的办法:一、在MyEclipse中选择Window...

Myeclipse报错Errors running builder 'JavaScript Validator' on project 问题解决

Myeclipse报错Errors running builder 'JavaScript Validator' on project 问题解决

Myeclipse有时候会编译报错:Errors occurred during the build.Errors running builder 'JavaScript Validator&...

postgresql错误:  操作符不存在: bigint = text(瀚高数据库)

postgresql错误: 操作符不存在: bigint = text(瀚高数据库)

字符串和数字判断是否相等时会报错解决方案:库里执行sql语句:create cast(text as bigint) with inout as implicit;...

Oracle 新建的表只能加引号才能查询出来怎么办

oracle数据库新建的表只能加引号才能查出来的解决办法:   CREATE TABLE "tour".""(  &nb...

java实现合并多个word文档 且可换页 实例代码(基于docx4j)

org.docx4j/docx4j/ Maven依赖写法Maven下载jar包<dependency>    <groupId>org.docx4...

评论列表

好书网
2016-05-18 16:56:30

[嘻嘻]过来看看

fly
2016-05-18 16:56:30

博主也在研究jfinal?[熊猫]

萨瓦迪卡 回复:
恩 项目在用
2016-05-18 16:56:30
春天快乐
2016-05-18 16:56:30

谢谢分享

etsy
2016-05-18 16:56:30

[膜拜了] 非常不错啊,感谢无私的共享精神!

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。