넷빈(Netbeans)6.8에서 JSF 2.0 사용하기-소개-01
Written on 오후 4:56 by 강여사(J.Y.Kang)
JavaServer Faces 2.0 소개
JSF는 자바 웹 어플리케이션의 사용자 인터페이스(User Interface:UI) 프레임워크 입니다.
서버사이드에서 대상 클라이언트에게 UI를 렌더해주는데 손쉬운 작성과 유지가 가능케하는데 디자인에 촛점을 두고 있습니다.
* 재사용가능한 UI 컴포넌트로부터 UI를 구축하는데 쉽고
* UI에서 응용프로그램 데이터 이관(migration)이 심플화되며
* 서버 요청에 걸쳐 UI 상태를 관리를 지원하고,
* 서버사이트 어플리케이션 코드에 클라이언트-생성 이벤트를 연결하는데 심플 모델을 제공
* 커스텀 UI 컴포넌트 허용
더 자세히는 튜토리얼 참조. Java EE 6 Tutorial, Chapter 5: JavaServer Faces Technology.
이번 게시물에서는 넷빈즈에서 JSF 2.0 지원에 대해 기본 웹 어플리케이션 작성을 통해 다음과 같은 내용들을 살펴보고자 합니다
* 요청 데이터를 핸들링하기 위해 JSF 매니지드 빈 만들기
* 웹 페이지에 매니지드 빈 연결하기
* Facelet template file 에 웹 페이지 컨버팅하기
이 작업을 위한 환경은
넷빈 6.8
서버 글래스피시 v3 도메인
EE 6 버전입니다.
우선 새 프로젝트를 만듭니다.
파일 - 새 프로젝트(new project)

다음 클릭

경로는 적당히
다음 클릭

EE 버전은: Java EE 6 Web
다음 클릭

라이브러리는 글래스피시 v3 도메인에 기본으로 사용

Preferred Pages에 Facelets 으로 할 건지, JSP로 할 건지 선택이 가능합니다. (기본은 Facelets으로 되어 있습니다)
마침 클릭

작업을 위해 프로젝트 오른쪽에서 마우스 클릭
new - other

다음 클릭

패키지 이름은 guessNumber
scope 는 session 으로 줬습니다.
마침 클릭

생성자 부분에 다음과 같은 내용을 추가하고, 임포트 관련 문제 해결은 편집기에서 오른쪽 마우스를 클릭하여 가져오기 고정(fix import)를 클릭하면 됩니다.
------------------------------------------------------------------------------------
public class UserNumberBean {
Integer randomInt;
/** Creates a new instance of UserNumberBean */
public UserNumberBean() {
Random randomGR = new Random();
randomInt = new Integer(randomGR.nextInt(10));
System.out.println("Duke's number: " + randomInt); }
}
-------------------------------------------------------------------------------------
임포트 관련 참고: java.util.Random

JSF는 기본적으로 lazy instantiation을 사용하므로 UserNumberBean 객체가 만들어지지 않습니다.
즉, 특정 scope를 가진 빈은 어플리케이션에 의해 필요할 때 만들어지고 초기화된 다는 것을 의미합니다.

------------------------------------------------------------------------------
@ManagedBean(name="UserNumberBean", eager=true)
@ApplicationScoped
public class UserNumberBean {
-----------------------------------------------------------------------------
임포트 관련 문제는 위와 같이 fix import(가져오기 고정)으로 해결합니다.
임포트 참조: javax.faces.bean.ApplicationScoped


다시 아까와 같이 SessionScope로 원상태로 고칩니다.
----------------------------------------------------------------------------------
@ManagedBean(name="UserNumberBean")
@SessionScoped
public class UserNumberBean {
----------------------------------------------------------------------------------

세션 스코프를 가지기 위해 java.io.Serializable 인터페이스를 구현합니다.
---------------------------------------------------------------------------------
@ManagedBean(name = "UserNumberBean")
@SessionScoped
public class UserNumberBean implements Serializable {
---------------------------------------------------------------------------------
임포트 참고: java.io.Serializable

------------------------------------------------------------------------------------
Integer userNumber;
------------------------------------------------------------------------------------


------------------------------------------------------------------------------------
String response;
public String getResponse() {
if ((userNumber != null) && (userNumber.compareTo(randomInt) == 0)) {
//invalidate user session
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
session.invalidate();
return "Yay! You got it!";
} else {
return " Sorry, " + userNumber + " isn't it."
+ " Guess again...";
}
}
------------------------------------------------------------------------------------
임포트 참고:
javax.servlet.http.HttpSession
javax.faces.context.FacesContext

