<div class="note"> <b>Note</b> 이 글은 struts-faces의 특정버전에서 테스트 되었습니다. struts-faces가 아직 정식버전이 나오지 않았으므로. 어떤버전에서 다르게 작동할지 알수 없습니다. 이점 양해하지고 보시기 바랍니다. </div>

JavsServer Faces#

Sun사의 JSF페이지에서 자세한 정보를 알수 있다.

현재 1.2버전이 최신버전이고 웹애플리케이션을 위한 UI 프레임워크이다.

관련 셋팅 파일은 web.xml, faces-config.xml등이 있다. 관련 lib는 jsf-api.jar, jsf-ri.jar, jstl.jar, standard.jar, commons-beanutils.jar, commons-digester.jar, commons-collections.jar, commons-logging.jar등의 jar파일을 /WEB-INF/lib 밑에 두면된다.

Struts Faces#

아파치에서 정식으로 할당된 페이지는 없고 다운로드페이지에서 최신버전을 다운로드 할수 있다. 짐작하겠지만 정식 릴리즈된 버전은 없다.

JSF request를 Struts프레임워크에 연결을 시키기 위한 라이브러리이고 이번에 Struts가 8개의 하위프로젝트로 나뉘면서 아마 Faces프로젝트로 옮겨지는거 같다(완전한 개인적 추측이다).

struts-faces.jar 라는 이름의 jar파일을 /WEB-INF/lib밑에 두면된다.

WEB.xml에 셋팅하기#

<context-param>
<param-name>javax.faces.application.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
…………………………
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/ *</url-pattern>
</servlet-mapping>
……………………
<taglib>
<taglib-uri>/tlds/struts-faces</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-faces.tld</taglib-location>
</taglib>

web.xml에서의 JSF관련셋팅을 보여주고 있다.

  1. javax.faces.application.CONFIG_FILES는 JSF의 셋팅 파일을 지정하는 부분이다.
  2. Faces Servlet는 JSF요청을 javax.faces.webapp.FacesServlet가 처리를 하겠다 뭐 그정도.
  3. /faces/* 라는 값은 /faces/다음에 오는 모든 요청을 JSF요청으로 인식을 하겠다는 것이다.

faces-config.xml 셋팅하기#

<faces-config xmlns="http://java.sun.com/JSF/Configuration">
  <managed-bean>
    <managed-bean-name>LoginServer</managed-bean-name>
    <managed-bean-class>net.sarang.gikim.jsf.LoginServer</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
  </managed-bean>
  <navigation-rule>
    <from-view-id>/login.jsp</from-view-id>
    <navigation-case>
      <from-action>#{LoginServer.loginAction}</from-action>
      <from-outcome>success</from-outcome>
      <to-view-id>/success.jsp</to-view-id>
    </navigation-case>
……………………
  </navigation-rule>
  <navigation-rule>
    <from-view-id>/success.jsp</from-view-id>
    <navigation-case>
      <from-outcome>return</from-outcome>
      <to-view-id>/login.jsp</to-view-id>
    </navigation-case>
  </navigation-rule>
</faces-config>

실질적인 JSF셋팅 파일인 faces-config.xml이다.

JSF를 사용할때는 가장 기본적으로 managed-bean과 navigation-rule를 알아야 한다. struts사용자라면 managed-bean은 ActionForm과 Action객체를 합쳐놓은 것과 비슷(?)하다고 일단 이해하면 된다. navigation-rule은 ActionForward와 비슷하다고 생각하면 크게 이해에 무리가 되는 부분은 없다고 개인적으로 생각을 한다.

  1. managed-bean에는 name과 해당 class 그리고 범위를 지정해 주어야 한다. 즉 여기선 net.sarang.gikim.jsf.LoginServer라는 클래스가 managed-bean의 기능을 담당한다. 물론 jsp페이지에서 해당 클래스로 접근할때는 LoginServer라는 이름으로 접근하게 된다.
  2. navigation-rule에는 from-view-id와 navigation-case두가지 값을 기본적으로 설정해주어야 하고 navigation-case에는 하위로 from-action, from-outcome와 to-view-id값을 주어야 한다.
  3. from-view-id의 값은 대략 요청을 보낸 jsp를 지정해 주고 from-action은 managed-bean에서 처리를 하고 응답을 날린경우에 사용이 되고 from-outcome는 struts의 ActionForward의 name정도고 to-view-id는 struts의 ActionForward의 forward path이다.

struts-config.xml 셋팅하기.#

<?xml version="1.0" encoding="EUC-KR" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
  <form-beans>
    <!-- Registration form bean -->
    <form-bean name="loginForm" type="net.sarang.gikim.login.bean.LoginBean"/>
  </form-beans>
  <action-mappings>
    <action path="/login" type="net.sarang.gikim.login.control.LoginAction"
               name="loginForm“ scope="request“ validate="false">
      <forward name="failure"              path="/faces/fail.jsp"/>
      <forward name="success"              path="/faces/success.jsp"/>
      <forward name="login"              path="/faces/login2.jsp"/>
    </action>
  </action-mappings>
  <controller>
    <set-property property="processorClass"
       value="org.apache.struts.faces.application.FacesRequestProcessor"/>
  </controller>
</struts-config>

index.jsp#

<%page contentType="text/html; charset=EUC-KR" %>
<html>
<head>
<title>
index
</title>
</head>
<body bgcolor="#ffffff">

<a href="faces/login2.jsp">click..</a>

</body>
</html>

실제 JSF request를 위해서 web.xml에 설정된 데로 /faces/jsp파일명으로 지정한다.

login.jsp#

<%@page contentType="text/html; charset=EUC-KR"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="/tlds/struts-faces" prefix="s"%>
<f:view>
<s:html locale="true">
  <head>
    <title>login</title>
  </head>
<body bgcolor="#ffffff">
  <s:form action="/login" focus="host">
    <h:inputText id="userid" size="15" required="true" value="#{LoginServer.userid}" /><br>
    <h:inputText id="password" size="15" required="true" value="#{LoginServer.password}" /><br>
    <h:commandButton id="submit" type="submit" value="Do login" />
  </s:form>
</body>
</s:html>
</f:view>

  1. inputText에서 value부분은 Managed bean인 클래스의 userid와 password를 화면에 표시한다.
  2. form의 action부분에 struts처럼 xx.do형태로 쓰면 에러가 발생하였다. .do를 뺀다.

Managed Bean(LoginServer.java)#

package net.sarang.gikim.jsf;

public class LoginServer extends Object {
    private String userid;
    private String password;

    public LoginServer() {
   }
    public void setUserid(String userid) {
        this.userid = userid;
    }
……………
    public String getPassword() {
        return password;
    }
    public String loginAction(){
        ifuserid.trim().equals("scott"&& password.trim().equals("tiger") ){
            return "success";
        }else{
            return "fail";
        }
    }
}

  1. loginAction()에서 로직 처리후. return하는 부분은 Navigation rule에 의해 처리된다.
  2. success는 success.jsp로 이동하게 한다.

Struts Action Class(LoginAction.java)#

package net.sarang.gikim.login.control;
……………………….
public class LoginAction extends Action {
    public LoginAction() { }

    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) {
        LoginBean currentForm = (LoginBeanform;
        
        Login loginobj = new Login();
        loginobj.setId("fromm0");
        loginobj.setPasswd("ccc");

        currentForm.setLogin(loginobj);
        ifloginobj.getId().trim().equals("fromm0") ){
          return mapping.findForward("success");
        }else{
          return mapping.findForward("fail");
        }        
    }
}

success.jsp#

<%@page contentType="text/html; charset=EUC-KR"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="/tlds/struts-faces" prefix="s"%>

<f:view>
<s:html locale="true">
  <head>
    <title>success</title>
  </head>
  <body bgcolor="#ffffff">
      <s:form action="/return" focus="host">
      <h:outputLabel value="#{loginForm.login.id}" />유저가 로그인했습니다.
      <h:commandButton value="Back to Login Page" action="return"></h:commandButton>
      </s:form>
  </body>
</s:html>
</f:view>

  1. outputLabel부분에 value인 #{loginForm.login.id}은 Struts Action에서 넘겨진 ActionForm의 Login객체에서 id값을 표시한다.
  2. commandButton의 action의 값인 return은 Login.jsp페이지로 이동하게 한다.

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-1) was last changed on 06-Apr-2006 09:45 by UnknownAuthor