หน้าเว็บ

วันพุธที่ 25 กันยายน พ.ศ. 2556

spring session scope in JSF managedbean

บทความที่เกี่ยวข้องกัน  JSF ManagedBean can @Autowire Spring resources : java, JSF

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


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

แสดงความคิดเห็น