SSISO Community

시소당

Logic 태그 라이브러리 사용법

  Logic  태그  라이브러리는  출력  텍스트를  조건을  걸어  생성하는  경우나  객체  컬렉션을  돌면서  출력  텍스트를  반복적으로  생성  하는  경우  그리고  애플리케이션의  흐름을  제어  하는  경우  등에  유용한  태그들을  포함하고  있습니다.

사용  용도에  따라  값  비교,  부분  문자열  매칭,  리다이렉팅과  포워딩,  컬렉션  유틸리티    4가지  정도로  기능상  분류  할  수  있습니다.

아래는  Logic  태그  라이브러리내의  커스텀  태그  입니다.

Custom  tags  within  the  Logic  tag  library

empty  :  요청한  변수가    null  또는  빈  문자열인  경우  이  태그의  BODY를  수행
equal  :  요청한  변수가  지정한  값과  동일한  경우  이  태그의  BODY를  수행
forward  :  ActionForward  Entry를  통해  지정한  페이지로  포워드를  수행
greaterEqual  :  요청한  변수가  지정한  값보다  크거나  같으면  이  태그의  BODY를  수행
greaterThan  :  요청한  변수가  지정한  값보다  크면  이  태그의  BODY를  수행
iterate  :  지정한  컬렉션으로  이  태그내의  BODY  컨텐츠를  반복
lessEqual  :  요청한  변수가  지정한  값보다  작거나  동일한  경우  이  태그의  BODY를  수행
lessThan  :  요청한  변수가  지정한  값보다  작은  경우  이  태그의  BODY를  수행
match  :  지정한  값이  요청한  변수에  포함되어  일치하는  경우  이  태그의  컨텐츠를  수행
messageNotPresent  :  지정한  메시지가  이  요청에    없는  경우  이  태그의  BODY  컨텐츠를  생성
messagePresent  :  지정한  메시지가  이  요청에    있는  경우  이  태그의  BODY  컨텐츠를  생성
notEmpty  :  요청한  변수가  null도  빈  문자열도  아닌  경우  이  태그의  BODY  컨텐츠를  수행
notEqual  :  요청한  변수가  지정한  값과  동일하지  않은  경우  이  태그의  BODY  컨텐츠를  수행
notMatch  :  지정한  값이  요청한  변수의  문자열의  부분에  없는  경우  이  태그의  BODY  컨텐츠를  수행

notPresent  :  지정한  값이  이  요청에  없는  경우  이  태그의  BODY  컨텐츠를  수행
present  :  지정한  값이  이  요청에  있는  경우  이  태그의  BODY  컨텐츠를  수행
redirect  :  HTTP  리다이렉트를  표시


1.  값  비교

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

값을  취하여  VALUE  속성의  값과  비교,  태그에  주어진  값이  숫자로  변환되는  경우  숫자비교를  수행,  숫자로  변환되지  않는  경우  문자열  지교

<logic:present  parameter="id">
<!&#8212;요청  파라미터에  “id”가  있으면  이  부분이  출력됨  -->
</logic:present>

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

<logic:notEmpty  name="userSummary"  property="addresses">
<!&#8212;사용자의  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>

[예제]

&#61548;                다음과  같은  빈이  있을  때


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;
}
...
}


&#61548;                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);
}

&#61548;                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  컨텐츠의  수행  여부를  결정  합니다.

1001 view

4.0 stars