"자바 빈을 이용해서 특정 객체의 값을 가져와 보여주는 소스는 아래와 같은 형식으로 jsp에서 사용할 수 있다.

<% foo.Person p = (foo.Person) request.getAttribute("person"); %>
Person is : <%= p.getName() %>

jsp내에서 스크립틀릿을 없애기 위해 나온 것이 표준 액션이므로 스크립틀릿을 없애는 방법으로 표현하자면 아래와 같이 할 수 있다.

<jsp:useBean id="person" class="foo.Person" scope="request"></jsp:useBean>
Person created by servlet : <jsp:getProperty name="person" property="name"/>

위에서 id로 지정한 것을 아래 getProperty에서 name으로 가져다 쓸 수 있다.
property의 name은 자바빈의 getter, setter에서 사용하는 값이다. 즉 name은 getName()과 같은 기능을 하게 되는 것이다.
class는 패키지 명까지 다 써야한다.

getProperty가 있다면 당연히 setProperty도 있다.
setProperty는 다음과 같이 사용할 수 있다.

<jsp:setProperty name="person" property="name" value="Fred"/>

setProperty를 useBean 안에 사용하게 되면, 새로운 빈이 만들어지는 경우에만 설정하고, 이미 있는 경우에는 설정하지 않게 된다.
즉 다음과 같이 코딩하게 되면 빈이 없을 경우에만 값을 설정하게 된다.

<jsp:useBean id="person" class="foo.Person" scope="request">
    <jsp:setProperty name="person" property="name" value="Fred"/>
</jsp:useBean>

위와 같이 코딩하게 되면 컨테이너가 자동으로 생성해 주는 _jspService() 메소드는 다음과 같은 형식을 가지게 되는 것이다.

foo.Person person = null;
person = (foo.Person) _jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);

if(person == null) {
    person = new foo.Person();
    _jspx_page_context.setAttribute("person", person, PageContext.PAGE_SCOPE);
   
    org.apache.jasper.runtime.JspRuntimeLibrary.JspRuntimeLibrary.introspecthelper(
            _jspx_page_context.findAttribute("person"), "name", "Fred", null, null, false);
}

없다면 해당 객체를 만들어서 할당하고, 값을 추가 한다.
아래 "org.apache.jasper.runtime.JspRuntimeLibrary..." 부분은 컨테이너가 자동으로 생성하는 코드이므로 어떤 식으로 처리되는지 자세히 알 필요는 없다.

* 다형성 사용하기

빈 참조에 대해서도 다형성 기법을 사용할 수 있다.
가령 foo.Person이 추상 객체이고 Employee객체가 이를 상속 받았다면 아래와 같은 형식으로 쓸 수 있다.

<jsp:useBean id="person" type="foo.Person" class="foo.Employee" scope="page"></jsp:useBean>

type에는 클래스, 추상클래스, 인스턴스 등이 들어갈 수 있으며, class에는 type에 명기한 클래스를 상속한 것이거나 구현한 클래스가 들어가야 한다.

* HTML에서 JSP로 form 전송을 바로 하기

html에서 jsp로 바로 form을 전송하게 될 경우가 있다.

<form action="TestBean.jsp">
    name : <input type="text" name="userName">
    ID# : <input type="text" name="userID">
</form>

위와 같이 하게 되면 jsp에서는 어떻게 처리해야 할까?
request.getParameter를 사용하여 setProperty의 value 속성에 넣을 수도 있겠지만 param 속성을 이용하면 더 쉽게 빈에 값을 설정할 수 있다.

<jsp:useBean id="person" type="foo.Person" class="foo.Employee">
    <jsp:setProperty name="person" property="name" param="userName"/>
</jsp:useBean>

html에서 userName이라고 설정을 하였다면 param에 userName이라고 넣어주게 되면 name이란 빈 프로퍼티에 값이 설정되게 된다.
param이란 속성을 이용하는 것보다 더 간단한 방법이 있다.
html에서 form element의 이름이 빈 프로퍼티의 이름과 같게 되면 자동으로 들어가게 된다.
즉 다음과 같으면 param이란 속성을 안 적어 줘도 된다.

<form action="TestBean.jsp">
    name : <input type="text" name="name">
    ID# : <input type="text" name="userID">
</form>

<jsp:useBean id="person" type="foo.Person" class="foo.Employee">
    <jsp:setProperty name="person" property="name"/>
</jsp:useBean>

만일 빈의 모든 프로퍼티와 html form 객체의 모든 이름이 같다면 더욱더 간단하게 아래와 같이 할 수 있다.

<jsp:useBean id="person" type="foo.Person" class="foo.Employee">
    <jsp:setProperty name="person" property="*" />
</jsp:useBean>






신고

'Java > Servlet & JSP' 카테고리의 다른 글

EL 함수 사용하기  (0) 2009.02.13
EL 사용하기  (3) 2009.02.12
표준 액션을 사용한 JSP  (0) 2009.02.11
JSP 초기화 하기  (0) 2009.02.10
스크립틀릿에서 변수 선언하기  (0) 2009.02.04
간단한 Jsp 시작하기  (0) 2009.02.04

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret