พอดี มีเหตุการณ์บางอย่างครับ ที่ทำให้ไม่สามารถใช้ @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>

ไม่มีความคิดเห็น:
แสดงความคิดเห็น