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>