[英]session handling in JSF 1.2
我們如何處理JSF 1.2中的會話變量(添加/獲取)?
場景:考慮用戶成功登錄的登錄屏幕,用戶模型存儲在會話中。 用戶模式包含用戶角色。 下次,對於每個用戶操作,檢查用戶模型中的用戶角色並相應地顯示表單。 在這種情況下,如何在會話中添加用戶odel以及如何在每次會話中執行它?
以前我在Struts 1.2中工作過,在execute
方法中,我們有一個request
e =,用於獲取會話並訪問會話變量。 但我不確定如何在JSF 1.2中實現相同的功能。
唯一可行的方法是在faces-config.xml文件中的會話范圍中添加托管bean嗎?
請幫我解決JSF 1.2中的會話處理概念。
會話范圍由ExternalContext#getSessionMap()
以編程方式提供,它將ExternalContext#getSessionMap()
委托給HttpSession#get/setAttribute()
。
Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
// ...
您當然也可以將托管bean放在會話范圍內。 可以通過<managed-property>
從其他托管bean訪問它(或者只使用托管bean名稱作為map鍵遍歷會話映射)。
我認為您可以使用Java EE過濾器來實現此機制。
過濾器由Servlet Container控制,並根據your web.xml
順序首先在操作上運行。
將servlet過濾器添加到項目中。
public class YourFilter implements Filter {
public static final String USER = "USER_SESSION_KEY";
public void doFilter(ServletRequest req, ServletResponse response, FilterChain filterChain)
{
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession(true);
String servletpath = request.getServletPath();
if(!servletpath.contains("login.xhtml")) //exclude your login page and other pages required to pass this filter.
{
if (session.getAttribute(USER) != null)
{
//Control your authentication and roles.
}
else
{
//There is no user in the session.
}
}
}
filterChain.doFilter(request, response);
}
將過濾器添加到web.xml
<filter>
<filter-name>YourFilter</filter-name>
<filter-class>Package.YourFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>YourFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
其次,將您的User類放入JSF操作中的會話中。
public void userAction()
{
User user = new User();
//Build your User Class
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
request.getSession(false).setAttribute("USER", user);
}
PS:用戶類是用戶定義的POJO類。 你應該根據你的需要實現它。
public class User
{
private String username;
//Other properties and getter setter methods required.
}
如果要在JSF上下文中實現此機制。 您可以通過實現JSF階段偵聽器來構建相同的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.