넷빈(Netbeans)6.8에서 JSF 2.0 사용하기-소개-01

0

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)
Java Web - Web application

다음 클릭
프로젝트 명에 JSF20 이라고 줬습니다.
경로는 적당히
다음 클릭 서버를 글래스피시 v3 도메인
EE 버전은: Java EE 6 Web
다음 클릭 프레임워크에서 JavaServlet Faces 를 선택합니다.
라이브러리는 글래스피시 v3 도메인에 기본으로 사용 오른쪽의 configuration 탭을 누르면 JSF 구성에 대해 나옵니다.
Preferred Pages에 Facelets 으로 할 건지, JSP로 할 건지 선택이 가능합니다. (기본은 Facelets으로 되어 있습니다)
마침 클릭 이제 JSF Managed Bean 을 만들도록 하겠습니다.
작업을 위해 프로젝트 오른쪽에서 마우스 클릭
new - other JavaServer Faces 에서 JSF Managed Bean 을 선택합니다.
다음 클릭
클래스 이름은 UserNumberBean
패키지 이름은 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
이 상태로 (SessionScope)로 수행(Run) 해보면 그림과 같이 배포(deploye)수행 시간이 나옵니다.
JSF는 기본적으로 lazy instantiation을 사용하므로 UserNumberBean 객체가 만들어지지 않습니다.

즉, 특정 scope를 가진 빈은 어플리케이션에 의해 필요할 때 만들어지고 초기화된 다는 것을 의미합니다.
이 소스를 다른 건 그대로 두고 ApplicationScope로 바꾸면 어떻게 되는 지 살펴봅니다.
------------------------------------------------------------------------------
@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
변수를 하나 더 추가하고 이에 대한 getter/setter도 같이 작업합니다.(getter/setter는 편집기에서 오른쪽 마우스 클릭- 코드 삽입(insert code)을 선택하면 getter/setter 메뉴가 그림과 같이 제시됩니다. 클릭
------------------------------------------------------------------------------------
Integer userNumber;
------------------------------------------------------------------------------------
getter/setter 에서 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
이 다음은 page에 대해 알아보도록 하겠습니다. 계속...

If you enjoyed this post Subscribe to our feed


No Comment

댓글 쓰기