Jfianl学习第二天
今天是第二天使用框架
遇到了不少的问题
视图中获取Session
视图中获取session的方法,通过在全局拦截器中添加,SessionInViewInterceptor
public void configInterceptor(Interceptors me) {
me.add(new SessionInViewInterceptor()); //添加全局额拦截器
}
视图获取session
#if(session['loginMemberSession'] != null)
<a href="/member/index">#(session['MemberSession'].username)</a> //获取Session中的uername字段
判断POST请求GET请求
我也是通过看jfinal源码,才知道。
在com.jfinal.ext.interceptor包中
/**
* Accept POST method only.
*/
public class POST implements Interceptor {
public void intercept(Invocation inv) {
Controller controller = inv.getController();
if ("POST".equalsIgnoreCase(controller.getRequest().getMethod())) {
inv.invoke();
} else {
controller.renderError(405);
}
}
}
使用的话,只需要在控制器或者方法前添加POST拦截器
@Before({POST.class})
不过,这个拦截器并不适合我。我需要在一个Action做GET和POST的不同响应。
需要自己手写判断
if("GET".equalsIgnoreCase(getRequest().getMethod())){ //GET请求
renderTemplate("index.html");
return;
}
POST..do something
判断是否为重复提交
在百度一搜,大多为几年前的答案。
本来就此打算复制粘贴完事,不过刚复制到一半就寻思去jfianl源码中去翻一翻。
很容易就找到了TokenManager,使用十分的简单。
首先要在视图中的提交表单中添加#(Token??),推荐安全用法
<form>
#(Token ??)
</form>
之后TokenManager提供了三个方法,init没搞懂。
但是主要就是用createToken() 和 validateToken()
createToken("控制器对象","Token名字","时间s");
validateToken("控制器对象","Token名字");
if(TokenManager.validateToken(this, "ninengkandedongwoxiedeshishenmema")){
index("请求被拒接"," ̄□ ̄请勿重复提交");
return;
}else
//创建防止重复提交的hidden标签
TokenManager.createToken(this,"ninengkandedongwoxiedeshishenmema" ,30);
折腾视图,折腾了一天。:(