본문 바로가기

FrameWork/Struts

[struts 1.3] struts tag logic

■ Struts Logic 태그

1. empty : 요청한 변수가  null 또는 빈 문자열인 경우 이 태그의 BODY를 수행
2. equal : 요청한 변수가 지정한 값과 동일한 경우 이 태그의 BODY를 수행
3. forward : ActionForward Entry를 통해 지정한 페이지로 포워드를 수행
4. greaterEqual : 요청한 변수가 지정한 값보다 크거나 같으면 이 태그의 BODY를 수행
5. greaterThan : 요청한 변수가 지정한 값보다 크면 이 태그의 BODY를 수행
6. iterate : 지정한 컬렉션으로 이 태그내의 BODY 컨텐츠를 반복
7. lessEqual : 요청한 변수가 지정한 값보다 작거나 동일한 경우 이 태그의 BODY를 수행
8. lessThan : 요청한 변수가 지정한 값보다 작은 경우 이 태그의 BODY를 수행
9. match : 지정한 값이 요청한 변수에 포함되어 일치하는 경우 이 태그의 컨텐츠를 수행
10. messageNotPresent : 지정한 메시지가 이 요청에  없는 경우 이 태그의 BODY 컨텐츠를 생성
11. messagePresent : 지정한 메시지가 이 요청에  있는 경우 이 태그의 BODY 컨텐츠를 생성
12. notEmpty : 요청한 변수가 null도 빈 문자열도 아닌 경우 이 태그의 BODY 컨텐츠를 수행
13. notEqual : 요청한 변수가 지정한 값과 동일하지 않은 경우 이 태그의 BODY 컨텐츠를 수행
14. notMatch : 지정한 값이 요청한 변수의 문자열의 부분에 없는 경우 이 태그의 BODY 컨텐츠를 수행
15. notPresent : 지정한 값이 이 요청에 없는 경우 이 태그의 BODY 컨텐츠를 수행
16. present : 지정한 값이 이 요청에 있는 경우 이 태그의 BODY 컨텐츠를 수행
17. redirect : HTTP 리다이렉트를 표시

1. 값 비교

비교 결과가 “true” 인 경우에만 body 컨텐츠를 출력 합니다.

값을 취하여 VALUE 속성의 값과 비교, 태그에 주어진 값이 숫자로 변환되는 경우 숫자비교를 수행, 숫자로 변환되지 않는 경우 문자열 지교
<logic:present parameter="id">
<!?요청 파라미터에 “id”가 있으면 이 부분이 출력됨 -->
</logic:present>

어떤 컬렉션에서 반복을 수행하기 전에 컬렉션이 비었는지 여부를 체크하기 위해 아래와 같이 notEmpty를 사용 합니다.

<logic:notEmpty name="userSummary" property="addresses">
<!?사용자의 address 컬렉션에서 모든 객체들을 돌며 반복 출력 합니다.-->
<logic:iterate id="address" name="userSummary" property="addresses">
<!-- Print out the address obejct in a table -->
</logic:iterate>
</logic:notEmpty>

아래는 ActionForm내의 property와 숫자 값을 비교하는 예 입니다.
<logic:lessThan property="age" value="21">
<!-- 21세보다 나이가 작은 경우 이 부분이 실행 -->
</logic:lessThan>

아래는 bean1.value와 bean2.value가 같을 경우 본문을 수행 합니다.
<bean:define id=”value2” name=”beans2” property=”value”/>
<logic:equal value=”<%= (String) value2 %>” name=”bean1” property=”value”>
Equals~~~
</logic:equal>

<logic:equal name="bean" property="doubleProperty" value="<%= doub1 %>">
equal
</logic:equal>
<logic:greaterEqual name="bean" property="doubleProperty" value="<%= doub1 %>">
greaterEqual
</logic:greaterEqual>

이러한 비교를 위한 평가용 태그(equal, notEqual,greaterEqual, lessEqual, greaterThan, leeThan, match, notMatch)는 모두 평가 할 value 프로퍼티를 지정 해야 합니다.

아래는 empty와 notEmpty예제 입니다.
<logic:empty name="myBean">
The bean is missing
</logic:empty>
<logic:notEmpty name="myBean">
The bean is not missing
</logic:notEmpty>

2. 부분 문자열 매칭

value속성에 지정한 문자열과  다른 속성을 통해 주어진 값과 비교를 수행 합니다. 이때 주어지는 값은 cookie, header, parametert, property, name 속성들중 하나 입니다. 매칭 태그에는 값 비교 태그에는 없는 location 속성이 있는데 이는 태그가 문자열의 시작에서  또는 끝부분에서 매칭을 시작할 것인가를 알려 줍니다.

아래는 요청 파라미터 “action”의 값이 문자열 “processLogin”으로 시작하는지 여부를 결정하는 매칭 태그 입니다.
<logic:matchTag parameter="action" value="processLogin" location="start">
Processing Login....
</logic:matchTag>

만약 “location” 속성을 지정하지 않으면 변수와 value 속성값 사이의 매칭은 아무 곳에서나 시작 합니다. Location이 “start”인 경우 value 속성의 값으로 문자열이 시작해야 ”true”임

[브라우저 타입을 확인 하는 예제]
<logic:match header="User-Agent" value="Mozilla">
Mozilla!
</logic:match>
<logic:notMatch header="User-Agent" value="Mozilla">
Not Mozilla :(
</logic:notMatch>

[아래는 빈 프로퍼티와 문자열을 비교 합니다.]
<logic:match name="bean" property="stringProperty" value="hello world">
Hello World!
</logic:match>
<logic:notMatch name="bean" property="stringProperty" value="hello world">
I'm so sad and lonely.
</logic:notMatch>

3. 리다이렉팅과 포워딩

redirect 태그는 컨테이너가 지원하는 경우 URL을 완전히 다시 써서 클라이언트에 보냅니다.

forward 태그는 지정된 전역 ActionForward로 포워딩/리다이렉팅을 수행, redirect와 달리 name 속성을 포함하는데 이것은 ActionForward의 논리적인 이름 입니다. 스트럿츠에서 forward인지 redirext인지는 설정 파일에서 기술 합니다.

아래는 redirect 예제 입니다.
<logic:notPresent name="loginForm">
<logic:redirect href="/registeruser/index.jsp" />
</logic:notPresent>

아래는 포워드 예젭니다.
<logic:forward name="login" />

설정 파일에서는 ……
<global-forwards>
<forward name="login" path="/loginForm.jsp"/>
</global-forwards>

4. 컬렉션 유틸리티

Iterate 태그는 지정된 컬렉션내에 있는 모든 요소에 대해 한번씩 자신의 BODY 컨텐츠를 반복 합니다. id라는 속성을 가지는데 이는 반복에 사용 할 요소 등을 포함하는 페이지 스코프의 JSP 빈 이름 입니다.

<logic:iterate id="address" name="userSummary" property="addresses">
<!-- Print out the address obejct in a table -->
</logic:iterate>

위에서 iterate 태그는 userSummary 빈의 getAddress() 메소드를 호출 함으로써 address 컬렉션을 얻어 냅니다.각 반복 동안 address 컬렉션에 포함된 각각의 주소가 “address” 변수에 차례로 할당 됩니다.

아래의 예제를 참고 하세요~
<UL>
        <logic:iterate id=”item” name=”list”>
                <LI><bean:write name=”item”/></LI>
        </logic:iterate>
</UL>

다음 예제도 참고 하세요…
<logic:iterate id="employee" name="department" property="employees" scope= "request">

<bean:write name="employee" property="username" />

<bean:write name="employee" property="name" />

<bean:write name="employee" property="phone" />

</logic:iterate>

[예제]
- 다음과 같은 빈이 있을 때
import java.io.Serializable;
public class User implements Serializable {
private String lastName;
private String firstName;
private String email;
public String getEmail() {
return email;
}
...
public void setEmail(String string) {
email = string;
}
...
}

- Action에서 다음과 같은 처리를 한 경우
while (rs.next()){
String firstName = rs.getString(1);
String lastName = rs.getString(2);
String email = rs.getString(3);

User user = new User();
user.setEmail(email);
user.setFirstName(firstName);
user.setLastName(lastName);

list.add(user);
}

if (list.size() > 0){
request.setAttribute("users", list);
}

- JSP 파일에서 처리 예
<logic:present name="users">
<table border="1">
<tr>
<th>
<bean:message key="userRegistration.firstName"/>
</th>
<th>
<bean:message key="userRegistration.lastName" />
</th>
<th>
<bean:message key="userRegistration.email" />
</th>
</tr>
<logic:iterate id="user" name="users">
<tr>
<td>
<bean:write name="user" property="firstName"/>
</td>
<td>
<bean:write name="user" property="lastName"/>
</td>
<td>
<bean:write name="user" property="email"/>
</td>
</tr>
</logic:iterate>
</table>
</logic:present>

5. 메시지와 에러
messagePresent와 messageNotPresent 테그는 요청 스코프에 ActionMessage나 ActionErrors 객체가 존재하는지에 따라 BODY 컨텐츠의 수행 여부를 결정 합니다. 


예전에 가지고 있던 자료들인데..
지금도 스트럿츠 1.3 을 쓰는곳이 남아 있는지는 모르겠다...
자료들 정리하면서 블로그에 남긴다.

'FrameWork > Struts' 카테고리의 다른 글

[struts 1.3] struts tag bean  (0) 2011.06.27
[struts 1.3] struts tag html  (0) 2011.06.27
[Struts 1.3] error AbstractExceptionHandler , ExceptionCatcher  (3) 2010.10.25
Filter의 개념  (0) 2009.11.07