关于jfinal的session

本人在开发时需要重复得到session里面的数据,但是又不想在一个controller里面重复使用getsessionAttr这个函数,于是就想写一个工具类,在里面完成这个操作,具体如下:

public class UtilController extends Controller {
    private UserModel userModel= null;

    public String getIdentity(){
        userModel = getSessionAttr("user");
        if (userModel != null)
            return userModel.getStr("identity");
        return null;
    }
}

然后在其他controller里面这样调用:

String identity = util.getIdentity();

但是报错了:

java.lang.NullPointerException

at com.jfinal.core.Controller.getSessionAttr(Controller.java:478)

at com.demo.controller.UtilController.getIdentity(UtilController.java:10)

请问波总这是怎么一回事呢@jfinal

评论区

JFinal

2020-02-02 12:16

代码缺失,注意修改本贴,点击工具栏中的 代码语言 下拉框,选择 java,然后再贴代码进去

好好学习1111

2020-02-02 12:23

@JFinal 已经改好了!

JFinal

2020-02-02 12:30

getSession() 依赖于 Controller 内部持有的 HttpServletRequest request 对象,而你的 UtilController 继承 Controller 时,这个对象是不存在的

你可以引入一个 public class BaseController extends Controller ,然后在这里面添加 getIdentity() 方法。最后,你所有的 controller 改为继承 BaseController 即可

JFinal

2020-02-02 12:33

jfinal.com 官网中就是用了这样的机制,很便利,例如:
public class BaseController extends Controller {
@NotAction
public Account getLoginAccount() {
....
}

@NotAction
public boolean isLogin() {
return getLoginAccount() != null;
}

@NotAction
public boolean notLogin() {
return !isLogin();
}
}

JFinal

2020-02-02 12:34

建议加入俱乐部,获取 jfinal 官网代码,一整套解决方案,十分便利:
https://jfinal.com/club

好好学习1111

2020-02-02 12:39

@JFinal 问题解决了,感谢波总!!!

热门反馈

扫码入社