Struts 2 태그

struts 2 태그를 사용하기 위해서는 jsp 페이지에 다음과 같이 taglib를 선언해야 한다.

 

<%@ taglib prefix="s" uri="/struts-tags" %>

 

 

[0] request.getParameter()  request.getAttribute()session.getAttribute()

 

<s:property value="#parameters.변수명" /> => request.getParameter() 

<s:property value="#request.변수명"> => request.getAttribute() 
<s:property value="#session.변수명"> => session.getAttribute()

 

 

[1]OGNL(Object Graph Navigation Language)

OGNL은 자바 객체의 프로퍼티 값을 얻거나 저장하기 위하여 자바 빈들 상의 프로퍼티들을 추적하는 표현식을 다룰 수 있게 한다.

 

또한 OGNL은 정적 메서드 또는 인스턴스 메서드를 실행하고, 컬렉션 타입의 데이터 또한 사용할 수 있도록 Lambda 표현식과 같은 진보된 표현식을 제공한다. 또한 OGNL은 XWork 내에서 확장된 풍부한 타입 변환 모델을 제공한다. 또한 OGNL 언어의 기본은 단순하며, 빈의 프로퍼티는 프로퍼티 이름으로 엑세스 된다.

 

■ 태그의 value속성은 객체를 의미한다

<s:textfield name="id" value="seoul"/> 또는

<s:textfield name="id" value="${seoul}"/>

 

이라고 하면 value 속성의 seoul은 문자가 아닌 getSeoul() 메서드 호출의 의미가 된다. 따라서 문자 seoul을 의미하고 싶다면

 

<s:textfield name="id" value="'seoul'"/>또는

<s:textfield name="id" value="{'seoul'}"/>

 

라고 표현해야 한다.

 

■ # 사용(외부 참조)

스트럿츠2는 OGNL표현식을 사용하기위해 최상위 컨텍스트 맵를 사용한다. 이 컨텍스트 맵에는 어플리케이션, 세션, ValueStack(루트), request, 파라미터 등의 객체가 저장되고 여기서 액션은 ValueStack 즉 루트 객체에 있기 때문에 루트 객체에서는 #없이 프로퍼티를 참조할 수 있다. 그러나 다른 객체 예를 들어 session 객체의 프로퍼티를 참조하려면 #을 사용해야한다.

 

<s:property value="#session.myid"/> 또는

<s:property value="#session['myid']"/>

 

예) OGNL을 사용해서 요청 파라미터, 요청, 세션을 참조 하는 법

#parameters['key'] or #parameters.key

-> request.getParameter("key") 의 반환 값과 동일

 

#request['key'] or #requuest.key

-> request.getAttribute("key")의 반환 값과 동일

 

#session['key'] or #session.key

-> session.getAttribute("key")의 반환 값과 동일

 

■ collections 객체(map, list, set) 사용 시 OGNL

<s:select name="name" list="{'aa','bb','cc'}" value="%{'bb'}"/>

 

이것은 문자열 aa,bb,cc 를 포함하는 리스트를 생성하고 기본값으로 bb를 사용한다는 의미 이다.

 

<s:select name="name" list="#{'key1':'aa','key2':'bb','key3':'cc'}"/>

 

이것은 key1 라는 키 값에 aa라는 value 값을 저장 한다는 의미 이다.

 

 

[2] 컨트롤 태그(일반)

■ if , else , elseif

⋅ 의미

 기본적 if구문

⋅ 사용 예

 <s:if test="a==1">a는 1이다

 </s:if>

 

<s:if test="%{false}">
    <div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
    <div>Will Be Executed</div>
</s:elseif>
<s:else>
    <div>Will Not Be Executed</div>
</s:else>

 

- elseif 태그

<s:if test="%{false}">
    <div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
    <div>Will Be Executed</div>
</s:elseif>
<s:else>
    <div>Will Not Be Executed</div>
</s:else>

 

- else 태그

<s:if test="%{false}">
    <div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
    <div>Will Be Executed</div>
</s:elseif>
<s:else>
    <div>Will Not Be Executed</div>
</s:else>

 

if 에서 parameter 값으로 status 변수가 넘어왔을 경우(#parameters.status) 처리

<s:if test="#parameters.status[0] == 'invalid' ">

     invalid process

</s:if>

 또는

<s:set name="status"><s:property value="#parameters.status" /></s:set>

<s:property value="%{status}" /> <!-- 출력 -->

<s:if test="%{#status=='invalid'}">

    invalid process

</s:if>

또는

<s:set name="status"><s:property value="#parameters.status" /></s:set>

<s:property value="#status" /> <!-- 출력 -->

<s:if test="#status=='invalid'">

    invalid process

</s:if>

 

■ append

⋅ 의미

 여러 리스트를 하나의 iterator로 묶어줌(첫 번째 리스트에 두 번째 리스트가 합쳐진 형태)

⋅ 사용 예

<s:append id = "totalList">

<s:param value="%{list1}"/>

<s:param value="%{list2}"/>

</s:append>

 

<s:iterator value="%{totalList}">

<s:property/>

</s:iterator>

 

■ generator

⋅ 의미

val 속성 값으로

iterator를 생성

⋅ 속성

separator : 구분자

count : 최대 요소 수

⋅ 사용 예

<s:generator separator=","val="%{'aaa,bbb,cc,dd'} count="3">

<s:iterator>

<s:property/>

</s:iterator>

</s:generator>

cf) 결과 : aaa,bbb,ccc

 

■ merge

⋅ 의미

여러 리스트를 하나의 iterator로 묶음(첫 번째 리스트의 첫 번째 아이템, 두 번째 리스트의 두 번째 아이템, 다시 첫 번째 리스트의 두 번째 아이템 순서로 합쳐짐)

⋅ 사용 예

<s:merge id= "totalList">

<s:param value="%{lsit1}"/>

<s:param value="%{list2}"/>

</s:merage>

 

<s:iterator value="%{totalList}">

<s:property />

</s:iterator>

 

■ sort

⋅ 의미

  태그속성으로 설정되는 comparator를 사용하여 목록을 정렬하는 태그. 예를 들어 list 에 {b,a,c}를 저장하고 comparator를 사용 정열하면 {a,b,c}가 됨

⋅ 사용 예

<s:sort comparator="myComparator" source ="list">

<s:iterator>

<s:property/>

</s:itertator>

</s:sort>

 

■ subset

⋅ 의미

iterator의 서브셋을 취하는 태그

⋅ 속성

count : subset iterater에 담을 요소의 수

start : 시작 인덱스 값(0부터)

decider : 메서드 사용 시 메서드 명

⋅ 사용 예

<s:subset source="list" count="3" start ="3">

<s:iterator>

<s:property/>

</s:iterator>

</s:subset> 

 

[3] 데이터 태그 (일반)

■ a

⋅ 의미

HTML 의 <a href =""/>

⋅ 사용 예

<s:url id="test" action="link">

</s:url> 

<s:a href="${test}">링크</s:a>

 

■ action

⋅ 의미

jsp에서 직접 액션을 호출

⋅ 속성

executeResult : 리절트 실행여부 

⋅ 사용 예

<s:action name="action1" executeResult="true"/>

 

■ bean

⋅ 의미

자바빈 규정에 따라 클래스를 인스턴스화

 ⋅ 사용 예

<s:bean name="com.bean.User" id="user">

<s:param name="first" value="'a'"/>

<s:param name="last" value="'b'"/>

first : <s:property value="first"/>

last : <s:property value="last"/>

</s:bean>

<br/>

first :<s:property value="#user.first"/>

last : <s:property value="#user.last"/>

 

■ date

⋅ 의미

date형식 가져오기

⋅ 사용 예

<s:date name="currDate" format="yyyy-MM-dd hh:mm:ss"/>

 

■ debug

 ⋅ 의미

debug 하이퍼 링크를 출력. 링크를 클릭하면 ValueStack의 내용과 스택 컨텍스트 내용을 출력

⋅ 사용 예

<s:debug/>

 

■ i18n

⋅ 의미

리소스 번들을 얻고 그 내용을 벨류 스택에 저장한다(미리 리소스 번들에 "abc= 가나다" 라고 만들어 둠)- 국제화

⋅ 사용 예

<s:i18n name="example.i18n.myBundle">

리소스 번들예제

<s:text name= "abc"/>

</s:i18n>

 

■ include

⋅ 의미

jsp include 역활

⋅ 사용 예

<s:include value="includeTag1.jsp">

<s:param name="a" value="'abc'"/>

</s:indclude> 

 

■ param

⋅ 의미

파리미터로 사용

⋅ 사용 예

<s:param name="a" value="'a'"/>

<s:param name="a">a</s:param>

 

■ push

⋅ 의미

ValueStack 안에 값을 저장 한다

⋅ 사용 예

<s:push value= "user">

first:<s:property value="first"/>

se<s:property value="se"/>

</s:push>

 

■ set

⋅ 의미

특정 스코프의 변수에 값을 할당

⋅ 사용 예

<s:set name="a" value="user.first" scope="session"/>

<s:porperty value="#a"/>

 

■ ext

⋅ 의미

i18n 텍스트 메시지를 렌더링

 

■ url

⋅ 의미

url 생성. param 태그 사용가능

⋅ 사용 예

<s:url id="a" value="/jsp/a.jsp">

<s:param name="id" value="'a23'"/>

</s:url>

 

■ propery

⋅ 의미

프로퍼티값을 출력. value값을 지정안하면 ValueStack의 맨 위의 값을 취함

  1. default (String) -  값이 널일때 기본값으로 사용할것이 있는지 정함 스트링형
  2. escape (Boolean) - HTML형식으로 보여줄지 정함 기본값은 true
  3. value (Object) - 값을 보여줌 obejct타입

⋅ 사용 예

<s:property value="a"/>

<s:property />

 

[4] 폼 태그 (사용자)

■ checkbox

⋅ 의미

html checkbox로 랜더링

⋅ 사용 예

<s:checkbox name="a" value="%{aa}"/>aa

<s:checkbox name="b" value="%{bb}"/>bb

 

■ checkboxlist

⋅ 의미

list를  체크박스 시리즈로  생성

⋅ 사용 예

<s:checkboxlist name="check1" list="list1"/>

 

■ combobox

⋅ 의미

html  text와 select를 그룹으로 제공

⋅ 사용 예

<s:combobox name="checkedFruit" list="{'apple','grape','orange'}"/>

<s:combobox name="checkedFlower" list="%{#{'1':'rose','2':'cosmos','3':'lily'}}"/>

<s:combobox name="checkedTraffic" list="mapTraffics"/>

 

■ datetimepicker

⋅ 의미

 datetimepicker 요소를 렌더링(달력 출력). 헤드에 ajax 설정

⋅ 사용 예

<head>

<s:head theme="ajax">

</head>

<s:datetimepicker name="birthday"/>

 

■ doubleselect

⋅ 의미

첫 번째 리스트 선택에 따라 두 번째 리스트 내용이 선택 되어 나온다.

⋅ 사용 예

<s:doubleselect name="list1" list="{'1",'2'}" doubleName="list2"

doubleList="%{top=='1'? {'a','b'}:{'가','나'}}"/>

 

■ head

⋅ 의미

head 섹션의 부분을 렌더링한다.

 ⋅ 사용 예

 <s:head theme="ajax"/>

 

■ file

⋅ 의미

html file요소

⋅ 사용 예

<s:file name="upload"/>

 

■ form

⋅ 의미

html form 요소

⋅ 사용 예

<s:form action="admin" theme="simple">

</s:form>

 

■ hidden

⋅ 의미

html hidden

⋅ 사용 예

<s:hidden name="property" value="some"/>

 

■ label

⋅ 의미

html label

⋅ 사용 예

<s:label>예제 </s:lable>

 

■ optontransferselect

⋅ 의미

2개의 select 컴포넌트 사이에 option을 이동할 수 있는 컴포넌트를 생성

⋅ 사용 예

<s:head theme="ajax"/> 

<s:optiontransferselect headerKey="" headerValue="--please select--" emptyOption="true"

leftTitle="Fruit" rightTilte="Car" name="checkedList" list="listFruit" doubleHeaderKey=""

doubleHeaderValue="--please select--" doubleEmptyOption="true"

doubleName="checkedList2" doubleList="listCar"/>

 

■ optgroup

⋅ 의미

select 태그 내에 삽입할 optgroup 컴포넌트를 생성

⋅ 사용 예

<s:head theme="ajax" />

<s:form theme="ajax"><s:select label="my selection" name="myselection"

value="{%{'popeye'}}" list="%{#{'sup':'sub','sp':'sp' }}"><s:optgroup label="'adult"

list="%{#{'sou':'sou'}}"/><s:optgroup label="fruit"

list="%{#{'o':'orange','a':'apple' }}"/></s:select></s:form>

 

■ password

⋅ 의미

 html password

⋅ 사용 예

<s:password name="pass" size="10" maxlength="15"/>

 

■ reset

⋅ 의미

reset 버튼

⋅ 사용 예

<s:reset value="reset"/>

 

■ select

⋅ 의미

html select

⋅ 사용 예

<s:select headerKey="" headerValue="선택" name="check1" list="list1" listKey="id"

listValue="name"/>

 

■ submit

⋅ 의미

submit 버튼

⋅ 사용 예

<s:submit />

⋅ method 접두어

Action class에 execute() 메서드와 cancel() 메서드가 존재 하는 경우 jsp에서,

 

<s:form action="actionname" theme="simple">

<s:textfield name="name"/>

<s:submit value ="전송"/>

<s:submit name="method:cancel" value="취소"/>

</s:form>

 

이런 경우 두 submit 버튼에 각각 execute() 와 cancel() 메서드를 바로 호출해서 쓸 수 있다.

 

⋅ action 접두어

만약 cancel submit에 다른 액션(goaction 이라고 가정)의 메서드를 호출하고자 한다면

 

<s:form action="actionname" theme="simple">

<s:textfield name="name"/>

<s:submit value ="전송"/>

<s:submit name="action:goaction" value="취소"/>

</s:form>

 

이런 경우 goaction 의 execute() 메서드가 호출 된다

 

⋅ redirect 접두어

<s:form action="actionname" theme="simple">

<s:textfield name="name"/>

<s:submit value ="전송"/>

<s:submit name="redirect:www.google.com" value="취소"/>

</s:form>

 

이렇게 하면 내부적으로 ServeltRedirectResult를 사용하여 www.google.com으로 리다이렉트 된다.

 

■ textarea

⋅ 의미

html textarea

⋅ 사용 예

<s:textarea name="test" theme="simple" cols="90"/>

 

■ textfield

⋅ 의미

html text 

⋅ 사용 예

<s:textfield name="test"/>

 

■ token

⋅ 의미

폼의 이중 submit 방지(더블클릭 등)

⋅ 사용 예

<s:token/>

<s:submit/>

 

■ updownselect

⋅ 의미

셀렉트박스의 요소를 위, 아래로 이동할수 있는 버튼을 가진 select 컴포넌트를 생성

⋅ 사용 예

<s:updownselect headerKey="" headerValue="선택" name="check" list="list1" listKey="id"

listValue="name" moveDownLabel="move down" moveUpLabel="move up"

selectAllLabel="select all"/>

 

[5] non 폼 태그 (사용자)

넌폼 태그(Non-Form Tag)는 폼에 종속되지 않고 단독으로 처리할 수 있는 태그들로 구성 되며, 비동기적인 비즈니스 로직을 수행할 수 있는 Ajax 기능을 포함한 태그들이 포함 하고 있다.

 

예를 들면, <s:div/>, <s:tabbedPanel/>, <s:tree/> 등을 대표로 들 수 있다. 일반적인 웹 애플리케이션에서 Ajax를 구현하기 위하여 XmlHttpRequest를 처리하기 위한 자바스크립트 코드가 필요하고, 서버 측에서 클라이언트로 비즈니스 데이터를 XML로 변환하여 전송해야하며 전송된 XML데이터를 DHTML을 이용하여 동적으로 컴포넌트를 구성해야 한다 하며, XML 데이터를 한다.

 

그러나 스트럿츠 2 프레임워크에서 제공하는 ajax 테마와 몇 몇 태그들을 이용하면 스트럿츠 2의 다른 개발과 동일한 방식으로 JSP와 Action 클래스, 비즈니스 로직을 구현하면서도 이를 가능하게 해주는 매우 강력한 기능을 제공한다.

 

■ actionerror

⋅ 의미

액션에 오류가 있으면 actionerror를 렌더링. 액션클래스에 『addActionError("에러메시지");』설정

⋅ 사용 예

<s:actionerror />

 

■ actionmessage

⋅ 의미

actionerror와 같이 사용

⋅ 사용 예

<s:actionmessage/>

 

■ component

특정 템플릿을 사용하는 커스텀 ui 위젯을 렌더링 한다.

 

■ div

ajax 테마를 사용할 때 div 태그는 전체 페이지를 갱신하지 않고 해당 내용을 갱신하기 위하여 현재 페이지로부터 원격호출을 제공한다.

 

■ fielderrror

필드에러 렌더링

 

■ table

모델링 테이블을 렌더링하기 위한 태그

 

■ tablePanel

tabbedpanel 위젯은 AJAX 컴포넌트이다. 각 탭은 로컬 또는 리모트 컨텐츠가 될 수 있다 (사용자가 탭을 선택할 때 갱신된다 )

 

■ tree

AJAX를 지원하는 트리 위젯을 렌더링 한다.

 

 

■ treenode

AJAX를 지원하는 트리 위젯 안의 트리 노드를 렌더링 한다

 

 

===============================================================================================================

복사http://blog.naver.com/tyboss/70047271376

[출처] Struts 2 Tag taglib 스트러츠2|작성자 마루아라

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 2012.12.11 11:14  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다