程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> freeMarker Jfinal 獲取session裡的值

freeMarker Jfinal 獲取session裡的值

編輯:關於JAVA
 

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>

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved