넷빈(Netbeans)6.8에서 JSF 2.0 사용하기-basic
Written on 오후 7:02 by 강여사(J.Y.Kang)
IDE의 새 JSF 2.0은 이전의 JavaServer Faces는 물론, Facelets 페이지를 위한 향상된 편집 기능을 포함하며, 엔티티 클래스와 함께 작업 가능한 다양한 기능들 및 일반 개발 작업을 위한 JSF 마법사 슈트, 예를들어, JSF 매니지드 빈, Facelets 템플릿 및 콤포지트 컴포넌트 등을 제공합니다.
이번 예제는 간단히 넷빈즈 IDE 6.8 에서 JSF 2.0 에 대해 알아보고자 합니다.
환경은 넷빈즈 6.8
서버는 글래스피시 v3 도메인
파일 - 새 프로젝트
Java Web - Web application
프로젝트 명은 기본 설정에 EE6 을 붙여줬습니다. (적당히)
경로 적당히
자바 EE 버전은 EE6 Web 으로
다음 클릭 여기서 JavaServer Faces 를 선택합니다(체크)
하면 아래 JSF 2.0 이 사용될 거라는 표시가 보입니다(기본)
만들어진 파일을 살펴보면 예전 JSF 1.2 에서는 welcome.jsp가 만들어졌지만
JSF 2.0 에서는 index.xhtml 이 만들어진 걸 볼 수 있습니다. 확인 그럼 이제 엔티티와 엔티티 클래스로부터 세션 퍼세이드(Session Facade)를 만들도록 하겠습니다.
우선 엔티티 클래스를 만듭니다.
프로젝트에서 오른쪽 마우스 클릭 - new - other 정보보존(Persistence) - 엔티티 클래스 (Entity classes)
패키지는 entities 로 줬습니다
그리고 퍼시스턴스 유닛을 만들기 위해 아래 퍼시스턴스 유닛만들기 버튼을 클릭합니다 이름은 기본 그대로
데이터 소스에서 New Datasource 를 선택하고, 이름을 jdbc/mysample 라고 줍니다. (현재는 없습니다, 나중에 자동으로 만들어질 겁니다)
테이블 생성전략에 생성(create)를 선택합니다.
생성
만들어진 Message 클래스에 private String message 를 추가하고 이에 대한 getter/setter 를 만듭니다(insert code: 코드 삽입 (Ctrl+I)을 사용하면 쉽게 만들수 있습니다)
-----------------------------------------------
private Long id;-----------------------------------------------
private String message;
코드 부분은 그림을 참조 하십시오
그리고 persistence.xml 을 열어서 JTA 로 잘 설정되어 있는 지도 확인합니다. (transaction-type="JTA").
이는 엔티티 클래스의 생명 주기가 컨테이너에 의해 관리된다는 것을 의미합니다.
이제 세션 퍼세이드(Session Facade)를 만들도록 하겠습니다.
프로젝트에서 오른쪽 마우스 클릭 - new - other Java EE 카테고리에서 - Session Beans for Entity Classes 를 선택합니다.
다음 클릭
참고: 이번 예제에서는 메시지 엔티티를 위한 무상태 세션 퍼세이드(Stateless Session Facade) 생성 마법사를 사용할 예정입니다. EJB 3.1 스펙에서 세션 빈을 위한 비즈니스 인터페이스는 현재 옵션(optional)입니다.
빈에 접근하는 클라이언트가 로컬인 이번 응용 프로그램에서는,따라서 로컬 인터페이스를 사용하거나,아니면 인터페이스 뷰를 사용하지 않거나 여러분 맘입니다. --;; 사용가능한 엔티티에 앞서 작성한 entities.Message 가 올라옵니다.
그럼 추가를 선택해 오른쪽으로 옮깁니다
다음 클릭
패키지명을 boundary 로 줬습니다.
마침 클릭
만들어진 소스 부분을 확인하면
다음과 같은 Stateless 와 PersistenceContext 가 작업되어 있습니다.
===========================================================
@Stateless===========================================================
public class MessageFacade {
@PersistenceContext(unitName = "WebApplicationEE6PU")
private EntityManager em;
IDE가 엔티티를 생성, 삭제, 변경, 및 찾기 등을 위한 일련의 메소드를 자동 작업해놓은 것을 확인할 수 있습니다.
=========================================================================
public List======================================================================확인findAll() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(Message.class));
return em.createQuery(cq).getResultList();
}
public ListfindRange(int[] range) {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(Message.class));
Query q = em.createQuery(cq);
q.setMaxResults(range[1] - range[0]);
q.setFirstResult(range[0]);
return q.getResultList();
}
public int count() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
Rootrt = cq.from(Message.class);
cq.select(em.getCriteriaBuilder().count(rt));
Query q = em.createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
그럼 이제 JSF 페이지들을 만들도록 하겠습니다.
프로젝트에서 오른쪽 마우스 클릭 - new - other
다음 클릭
클래스 이름을 MessageView 로 주고
패키지 명은 my.presentation 으로 줍니다
마침 클릭
만들어진 클래스를 살펴보면 다음과 같이 되어 있습니다.
====================================================
@ManagedBean(name="MessageView")====================================================
@RequestScoped
public class MessageView {
/** Creates a new instance of MessageView */
public MessageView() {
}
}
편집기의 적당한 공백에서 마우스 오른쪽을 클릭하여 코드 삽입(insert code: Ctrl+I) 을 선택합니다.
그리고 Call Enterprise Bean 을 선택합니다. 프로젝트 아래 MessageFacade를 선택하고
참조 인터페이스에서는 no 를 선택합니다
OK 클릭
그럼 아래 그림과 같이 @EJB 가 작성됩니다.
=======================================
@EJB=======================================
MessageFacade messageFacade;
다음 코드를 붙여넣습니다.
===================================================================
// Creates a new field===================================================================
private Message message;
// Creates a new instance of Message
public MessageView() {
this.message = new Message();
}
// Calls getMessage to retrieve the message
public Message getMessage() {
return message;
}
// Returns the total number of messages
public int getNumberOfMessages(){
return messageFacade.findAll().size();
}
// Saves the message and then returns the string "theend"
public String postMessage(){
this.messageFacade.create(message);
return "theend";
}
임포트 관련 문제 발생은 마우스 오른쪽을 눌러 가져오기 고정(fix import)를 선택합니다.
Message 관련해서 팝업창이 뜨는데 그림과 같이 선택하고 OK 클릭
작성된 코드 확인
이제 페이지를 수정하도록 하겠습니다.
======================================================================
<?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"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
Hello from Facelets
<f:view>
<h:form>
<h:outputLabel value="Message:"/><h:inputText value="#{MessageView.message.message}"/>
<h:commandButton action="#{MessageView.postMessage}" value="Post Message"/>
</h:form>
</f:view>
</h:body>
</html>
이제 다른 JSF 파일을 만들도록 하겠습니다.
프로젝트에서 오른쪽 마우스 클릭 - new - other
다음 클릭 파일 이름에 theend 라고 줍니다.
마침 클릭 다음 내용을 작업합니다.
==================================================
<?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>
<title>Facelet Title</title>
</h:head>
<h:body>
Hello from Facelets : RESULTS
<h:outputLabel value="Thanks! There are "/>
<h:outputText value="#{MessageView.numberOfMessages}"/>
<h:outputLabel value=" messages!"/>
</h:body>
</html>
그림 참조
실행하면 다음 그림과 같이 뜹니다.
그럼 메시지 부분에 적절히 단어를 입력합니다.
hi,nice 2 meet u 라고 주고 버튼을 클릭했습니다 결과가 1개 있다고 나오네요.
해당 내용은 다시 데이터베이스에서 확인할 수 있습니다.
Services 탭으로 가서 sample 데이터베이스의 MESSAGE 에서 데이터를 조회해보면 나옵니다.