2019-11-08 15:20
@鼻涕刘o0 高版本 jfinal 为了 tomcat、jetty 下的安全性,默认无法直接访问 JSP 文件,需要配置一下才可以直接访问:
public void configConstant(Constants me) {
me.setDenyAccessJsp(false);
}
2019-11-08 15:18
贴主认为 "不用继承" 是属于轻量级框架的一个特征,这个肯定是误解
spring、struts 这类 web 框架的 controller 确实可以不用继承就可以实现,但是必然会在 action 中出现对于类似于 ActionContext、ActionSupporter 等等之类的组件的依赖
也就是说,侵入性只是换了一种方式,但是不可能完全消除
从根本上来说,你使用某个框架,就必然对其组件有所依赖,也就必然有侵入性,只是侵入的方式有所不同
那么我们所说的追求的少侵入性或者无侵入性到底是什么呢?
做好业务层,让业务层对框架无依赖,这个在侵入性方向的努力才是对的,业务层在未来可以拆分出来换到不同的 web 框架中使用
最后,退一步讲,极少情况会出现将 controller 中的代码迁移到另一个 web 框架中使用的情况,所以完全无侵入性其实没有什么意义
继承可以带来很多好处,试用一下 jfinal 的 controller 就会知道,一个简单的继承立即拥有了十分之多的可用方法,让开发变得非常便捷
2019-11-08 14:59
@xiaoxxin6140 @爱小乖 在使用 SessionInViewInterceptor 时再多传入一个 true 参数,例如:
me.add(new SessionInViewInterceptor(true));
传入 true 参数是让拦截器在获取不到 sesion 对象时,立即创建一个,进而这个 session 永远不为 null,进而 session.user 才不会抛出空指针异常
如果不传入这个 true 参数,那么使用的时候需要用双问号表达式,例如:
#if(session.user ?? !=null)
因为双问号表达式可以在 session 为 null 时避免空指针异常,双问号表达式的文档见这里:
https://www.jfinal.com/doc/6-3
2019-11-08 14:55
@简单代码 jfinal club 中的 JsoupFilter.java 已经解决过了,参考 jfinal club 中对于 JsoupFilter 的使用方法
简单来说就是按一定规则将恶意部分过滤掉
2019-11-08 14:50
@smileForLife 使用 return 返回模板需要用拦截器稍做点扩展,例如:
public MyInterceptor implements Interceptor {
public void intercept(Invocation inv) {
inv.invoke();
Object ret = int.getReturnValue();
if (ret instantceof String) {
inv.getController().render(ret.toString());
}
}
}
然后将这个拦截器配置为全局拦截器:
public void configInterceptor(Interceptors me) {
me.add(new MyInterceptor());
}