พอดี มีเหตุการณ์บางอย่างครับ ที่ทำให้ไม่สามารถใช้ @SessionScoped ของ JSF ได้ ก็เลยต้องมาใช้ session scope ของ spring แทน
จาก code ผมได้ทำการทดสอบ ว่า session scope นี้ใช้งานที่จริงๆ หรือไม่ โดย
1. ทำการสร้าง method postConstruct(@PostConstruct) ขึ้นมา เพื่อ check ว่า bean นี้จะต้องถูกสร้างเพียงครั้งเดียว ต่อ 1 http session เท่านั้น คือมันจะเรียก method postConstruct เพียงแค่ครั้งเดียว (หลังจากที่เรียก contructor) จนกว่า session นั้นจะ expire ไป
2. ทำการ set ค่าลงใน http session (session.setAttribute("blogName", "na5cent")) เพื่อ check ว่าสามารถดึงค่านั้นออกมาใช้งานได้หรือไม่
ซึ่งเป็นไปตามที่ทำการทดสอบทั้ง 2 อย่าง คือสามารถใช้ @Scope(value="session") ของ spring แทน @SessionScoped ของ JSF ได้ครับ
HomePageController.java
package com.blogspot.na5cent.web.controller; import java.io.Serializable; import java.util.concurrent.atomic.AtomicInteger; import javax.annotation.PostConstruct; //import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; /** * * @author recrow */ @Component @Scope(value = "session") //@SessionScoped public class HomePageController implements Serializable{ private static final Logger LOG = LoggerFactory.getLogger(HomePageController.class); private AtomicInteger counter = new AtomicInteger(0); @PostConstruct public void postConstruct(){ LOG.debug("counter => {}", counter.incrementAndGet()); } public String getWelcomeMessage(){ HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(true); session.setAttribute("blogName", "na5cent"); return (String) session.getAttribute("blogName"); } }index.xhtml
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> </h:head> <h:body> Managedbean message : #{homePageController.welcomeMessage}<br/> EL message : #{session.getAttribute('blogName')} </h:body> </html>
ไม่มีความคิดเห็น:
แสดงความคิดเห็น