11/24 50-1 [JSP] Action Tag(useBean)
크게 봤을 때 자바빈은 모든 자바의 클래스를 의미함 !
근데 여기서 쓰는 useBean은 좁은의미의 자바빈을 의미한다
그럼 또 좁은의미의 자바빈은 뭘까
클래스 중에서도 private 계열의 클래스라고 생각하면 된다
private 클래스의 가장 중요한 특징은 바로 getter,setter를 이용하는거! 그래서 그걸 이용하는 property를 바로다음에 정리 할 거임 !
useBean은 자바빈 객체 생성 시 사용한다
역시 말은 어려우니 바로실전에 들어가자...
useBean의 속성은 총 3가지가 있다(id,class,scope)
<jsp:useBean id=" "/> 생성될 자바빈 개체의 이름-인스턴스 변수 역할을 함
<jsp:useBean class=" "/> 클래스의 패키지를 포함한 Full Name을 명시한다. ( 이건 import한 것과 같은 효과)
<jsp:useBean scope=" "/> 자바빈의 유효 범위 와 공유범위 명시 page(디폴트)/request/session/application
중요한거! class속성 대신에 type도 사용 가능하나 웬만하면 쓰지 말자
class속성 사용 하면
자바빈 생성 시 기존에 개체가 존재할 땐 생성하지 않고 기존의 개체를 그대로 사용 하고 없으면 자동으로 새로 생성 해 주는데 type속성을 사용하면 기존에 개체가 무조건 존재하고 있다고 가정하기 때문에 만약에 개체가 존재하지 않는다면 에러가 발생한다 !
++
- 자바빈 규약
1) Bean의 멤버 변수(속성,프라퍼티)는 반드시 private로 선언한다.
2) Bean의 메소드는 public으로 선언한다.
3) 속성에 해당하는 setXXX/getXXX 계열의 메서드가 존재 해야 한다.
4) 사용자정의 메소드 추가 가능하다.
* form의 하위요소의 이름과
자바빈의 속성(멤버변수)과 이름을 같게 하는게 좋다.
**예시***
MemberDTO member = new MemberDTO();
member.setId("kim");
member.setPwd("1234");
[액션태그로 자바빈 객체 생성하기]
우선 액션태그 말고 자바코드로 코딩한거를 보자
//1.request 영역에서 객체 얻기(속성명 : id, 값 : class)
MemberDTO member = request.getAttribute("member");
//2.영역에 존재하지 않을 때는 자동으로 생성하기
if(memeber == null){
//기본 생성자로 생성
member = new MemberDTO();
//생성된 객체를 request영역에 저장 (속성명은 id에 지정한 이름으로!)
request.setAttribute("member", member);
}
저 긴 줄을 액션태그를 쓰면 한줄로 끝낼 수 있다
<jsp:useBean id="member" class="model.MemberDTO" scope="request" />
id 는 인스턴스 변수명에 지정한 이름으로 씀고
class는 패키지를 포함한 full name
scope는 얻어올 객체의 영역 !
<%= member %>로 호출해보면
아직 뭐 지정한게 없어서 null 이지만
[액션태그로 자바빈 객체 속성 설정하기]
이거도 우선 자바코드로 구현한거 부터 보자
member.setAge("20");
member.setName("김길동");
member.setid("KIM");
member.setpwd("1234");
액션태그이용시
property 가 set
name이 변수명
value가 꺼내올 값
역할을 하는거! 이거 잘 바놔랏 !
<jsp:setProperty property="id" name="member" value="KIM" />
<jsp:setProperty property="pwd" name="member" value="1234" />
<jsp:setProperty property="name" name="member" />
<jsp:setProperty property="age" name="member" />
역시
<%=member %> 로 출력하면 결과는 둘이 똑같다
[getProperty액션태그로 자바빈 객체 속성 읽기]
getter를 호출한 것과 같다
<ul class="list-unstyled">
<li>아이디 : <jsp:getProperty property="id" name="member" /> </li>
<li>비밀번호 : <jsp:getProperty property="pwd" name="member" /> </li>
<li>이름 :<%=member.getName() %> </li>
<li>나이 :<%=member.getAge() %> </li>
</ul>
이해를 위해 섞어 씀
그래도 이질감 없이 잘 출력 됨
*중요*
jsp:getProperty 나 jsp:setProperty의 name속성에는
반드시 jsp:useBean액션 태그의 id속성에 지정한 값이어야 한다
자바코드로 생성한 인스턴스 변수는 불가.
이번엔
<jsp:forward page="UseBeanActionTagBasicResult.jsp"/>로 페이지 이동시켜서 그쪽에서 얻어올 거임!
왜 굳이?
영역을 얻어오는것도 해 봐야 하기 때문이다
UseBeanActionTagBasicResult.jsp에서 코드 작성
[영역에서 가져오기]
자바코드로 가져오면
MemberDTO member=(MemberDTO)request.getAttribute("member");
이걸 useBean액태그로 가져오면(이번엔 그냥 class대신 type을 사용)
<jsp:useBean id="member" scope="request" type="model.MemberDTO"/>
가져온것 출력하기 !
<h4>액션태그로 출력</h4>
<ul class="list-unstyled">
<li>아이디 : <jsp:getProperty property="id" name="member" /> </li>
<li>비밀번호 : <jsp:getProperty property="pwd" name="member" /> </li>
<li>이름 :<jsp:getProperty property="name" name="member" /> </li>
<li>나이 :<jsp:getProperty property="age" name="member" /></li>
</ul>
<h4>자바코드(스크립팅요소)로 출력</h4>
<ul class="list-unstyled">
<li>아이디 : <%=member.getId() %> </li>
<li>비밀번호 : <%=member.getPwd() %></li>
<li>이름 :<%=member.getName() %> </li>
<li>나이 :<%=member.getAge() %> </li>
</ul>