Struts2 Taglibary

From JCFWiKi

Jump to: navigation, search

그림:check.gif

  • 산출물 : JCF3.0™ Struts2 Taglibary 가이드
  • 작성자: 김민아
  • 작성일 : 2007/12/03

Copyright © 2007 Daewoo Information Systems Co., Ltd.

목차

[편집] Struts2 Tag library

[편집] overview

그림:forbidden.gif

  • Struts framework는 veiw technology과 별도의 Tag library를 제공한다.
  • JSPs에 제한적이 아니라, JSP, Velocity Freemarker 등 모든 view technologies에서 사용가능하다.

[편집] showcase

  • viewUser.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
	<link rel='stylesheet' href='<%= request.getContextPath() %>/css/style.css'>
		<s:head theme='ajax'/>
	<SCRIPT language='JavaScript' type='text/javascript'>
	function submit()
	{
		document.userForm.submit();
		return; 
	}
	</SCRIPT>
</head>
<body>
<h1>사용자 생성/수정</h1>
<s:form name='userForm' action='saveUser'  theme='ajax'>
<tr>
<td width='100' >
<s:textfield label="ID" labelposition="left" name='user.id' tooltip="새로운ID를 등록하세요" />
</td>	
</tr>
<tr>
<td>
<s:textfield label = "Name"  name='user.name' tooltip="당신의 이름을 입력하세요," />
</td>
</tr>	
<tr>			
<td>
<s:textfield label = "Password"  name='user.password' tooltip="비밀번호를 등록하세요," />
</td>
</tr>
<tr>
<td>
<s:select label = "address" name='user.addressCodeId' list='addressSelectList'
	listKey='id'listValue='name' tooltip="주소를 선택하세요,"
  emptyOption= "true" headerKey="None" headerValue="None" />
 </td>
		</tr>
 
		<tr>
                     <td>
			<s:textarea label = "Comments" labelposition="left" name='user.description' 
			 cols='20' rows="8" tooltip="특히사항을 입력하세요," />
					</td>
		</tr>
	
		<tr>
			<td>
			<s:datetimepicker
			  	label = "RegDate" name='user.regDate'  displayFormat='yyyy. MM. dd'			
			       endDate='2007-07-20' tooltip="등록하는 날짜를 선택하세요," />
				</td>
		</tr>
		
		<tr>
			<td>
				<s:radio  label = "Gender" name='user.gender'  list='genderRadioList' 
					  listKey='id' listValue='name' tooltip="성별을 선택하세요," />
					 </td>
		</tr>
		
		<tr>
			<td width='100' >
			<s:checkbox label = "Hashouse" fieldValue="true" labelposition="left" name='user.hasHouse' />
				</td>
		</tr>		
 
</s:form>
<br/>
<a href='javascript:submit()'>SAVE</a>&nbsp;&nbsp;&nbsp;
<a href='<%= request.getContextPath() %>/user/listUser.action'>LIST</a>&nbsp;&nbsp;&nbsp;
</body>
</html>
  • thumbs
  • listUser.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
 
<html>
<head>
<link rel='stylesheet' href='<%= request.getContextPath() %>/css/style.css'>
</head>
 
<body>
 
<h1>사용자 조회</h1>
<table cellpadding="3" cellspacing="0" border="1">
    <tr>
<td>ID</td><td>NAME</td><td>PASSWORD</td><td>ADDRESS</td><td>DESCRIPTION</td>
        <td>REGDATE</td><td>GENDER</td><td>HASHOUSE</td>
    </tr>
    
    <s:iterator value="userList">
        <tr>
<td><a href="<s:url action="viewUser"><s:param name="user.id" value="id"/></s:url>">
           <s:property value="id"/></a></td>
            <td><s:property value="name"/></td>
            <td><s:property value="password"/></td>
            <td><s:property value="address.name"/></td>
            <td><s:property value="description"/></td>
            <td><s:date name="regDate" format="yyyy. MM. dd" nice="true"/></td>
            <td><s:property value="gender"/></td>
            <td><s:property value="hasHouse"/></td>
        </tr>
    </s:iterator>
</table>
<br/>
<a href="<%= request.getContextPath() %>/user/addUser.action">ADD</a>
</body>
</html>
thumbs
<h1>사용자 조회</h1>
<table cellpadding="3" cellspacing="0" border="1">
    <tr>
        <td>ID</td><td>NAME</td><td>PASSWORD</td><td>ADDRESS</td><td>DESCRIPTION</td><td>REGDATE</td><td>GENDER</td>
        <td>HASHOUSE</td>
    </tr>
    
    <s:iterator value="userList">
        <tr>
            <td><a href="<s:url action="viewUser"><s:param name="user.id" value="id"/></s:url>">
             <s:property value="id"/></a></td>
            <td><s:property value="name"/></td>
            <td><s:property value="password"/></td>
            <td><s:property value="address.name"/></td>
            <td><s:property value="description"/></td>
            <td><s:date name="regDate" format="yyyy. MM. dd" nice="true"/></td>
            <td><s:property value="gender"/></td>
            <td><s:property value="hasHouse"/></td>
        </tr>
    </s:iterator>
</table>
<br/>
<a href="<%= request.getContextPath() %>/user/addUser.action">ADD</a>
</body>
</html>
thumbs
<h1>사용자 조회</h1>
<table cellpadding="3" cellspacing="0" border="1">
    <tr>
        <td>ID</td><td>NAME</td><td>PASSWORD</td><td>ADDRESS</td><td>DESCRIPTION</td><td>REGDATE</td>
            <td>GENDER</td><td>HASHOUSE</td>
    </tr>
    
    <s:iterator value="userList">
        <tr>
            <td><a href="<s:url action="viewUser"><s:param name="user.id" value="id"/></s:url>">
            <s:property value="id"/></a></td>
            <td><s:property value="name"/></td>
            <td><s:property value="password"/></td>
            <td><s:property value="address.name"/></td>
            <td><s:property value="description"/></td>
            <td><s:date name="regDate" format="yyyy. MM. dd" nice="true"/></td>
            <td><s:property value="gender"/></td>
            <td><s:property value="hasHouse"/></td>
        </tr>
    </s:iterator>
</table>
<br/>
<a href="<%= request.getContextPath() %>/user/addUser.action">ADD</a>
</body>
</html>
</pre>
 
[[그림:listUser.jpg|center|thumbs|500px]]
 
<h1>사용자 생성/수정</h1>
<s:form name='userForm' action='saveUser'  theme='ajax'>
 
 
		<tr>
			<td width='100' >
			<s:textfield
				label="ID" labelposition="left" name='user.id' tooltip="새로운ID를 등록하세요" />
				</td>	
		</tr>
 
		<tr>
                    <td>
			<s:textfield 
				label = "Name"  name='user.name' tooltip="당신의 이름을 입력하세요," />
				</td>
		</tr>
		
		<tr>
			<td>
			<s:textfield 
				label = "Password"  name='user.password' tooltip="비밀번호를 등록하세요," />
				</td>
		</tr>
		
		<tr>
			<td>
			<s:select 
			label = "address" name='user.addressCodeId' list='addressSelectList'
		 	listKey='id'listValue='name' tooltip="주소를 선택하세요,"
		       emptyOption= "true" headerKey="None" headerValue="None" />
			 </td>
		</tr>
 
		<tr>
                     <td>
			<s:textarea label = "Comments" labelposition="left" name='user.description' 
			 cols='20' rows="8" tooltip="특히사항을 입력하세요," />
					</td>
		</tr>
	
		<tr>
			<td>
			<s:datetimepicker
			  	label = "RegDate" name='user.regDate'  displayFormat='yyyy. MM. dd'			
			       endDate='2007-07-20' tooltip="등록하는 날짜를 선택하세요," />
				</td>
		</tr>
		
		<tr>
			<td>
				<s:radio  label = "Gender" name='user.gender'  list='genderRadioList' 
					  listKey='id' listValue='name' tooltip="성별을 선택하세요," />
					 </td>
		</tr>
		
		<tr>
			<td width='100' >
			<s:checkbox label = "Hashouse" fieldValue="true" labelposition="left" name='user.hasHouse' />
				</td>
		</tr>		
 
</s:form>
<br/>
<a href='javascript:submit()'>SAVE</a>&nbsp;&nbsp;&nbsp;
<a href='<%= request.getContextPath() %>/user/listUser.action'>LIST</a>&nbsp;&nbsp;&nbsp;
 
</body>
</html>
  • thumbs
  • listUser.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
<link rel='stylesheet' href='<%= request.getContextPath() %>/css/style.css'>
</head>

<body>

<h1>사용자 조회</h1>
<table cellpadding="3" cellspacing="0" border="1">
    <tr>
        <td>ID</td><td>NAME</td><td>PASSWORD</td><td>ADDRESS</td><td>DESCRIPTION</td><td>REGDATE</td><td>GENDER</td><td>HASHOUSE</td>
    </tr>
    
    <s:iterator value="userList">
        <tr>
            <td><a href="<s:url action="viewUser"><s:param name="user.id" value="id"/></s:url>"><s:property value="id"/></a></td>
            <td><s:property value="name"/></td>
            <td><s:property value="password"/></td>
            <td><s:property value="address.name"/></td>
            <td><s:property value="description"/></td>
            <td><s:date name="regDate" format="yyyy. MM. dd" nice="true"/></td>
            <td><s:property value="gender"/></td>
            <td><s:property value="hasHouse"/></td>
        </tr>
    </s:iterator>
</table>
<br/>
<a href="<%= request.getContextPath() %>/user/addUser.action">ADD</a>
</body>
</html>
thumbs


[편집] Tag 분석

[편집] UI tag

[편집] <s:form />

  • 설명
    • HTML에 input form 을 준다.
    • 만들어진 form은 javascript를 사용하여 action에 전달된다.
  • 사용 예)
<s:form name="articleForm" action="saveArticle" theme="simple" method="POST" enctype=multipart/form-data">
</s:form>
  • name
    • form의 이름을 만들어준다.
    • javascript에서 action에 form을 전달할 때 사용된다.
  • action
    • 불러올 action의 메소드 이름.
    • Form이 이 메소드로 보내진다.
  • theme
    • 같은 tag에 대해 다른 template를 섞거나 매치시킨다.
    • 예)“simple“, “xhtml“, “css_ xhtml“, "ajax"
    • theme 선택에 따라 보이는 화면이 틀리고, 적용되지 않는 tag들이 있다.

그림:forbidden.gif

  • label과 tooltip은 "simple“과 “css_ xhtml“에서 적용되지 않는다.
  • method
    • HTML form method를 지정한다.
    • Get, post가 있다.
    • 파일을 전송할 때는 반드시 post 방식을 사용한다.
  • enctype
    • binary로 값을 넘길 때 사용
    • Enctype을 사용하지 않아도 텍스트는 넘길 수 있으나 이미지나 실행파일은 넘길 수 없음.
    • “multipart/form-data”: 웹상에서 파일을 전송할때 사용하는 하나의 인코딩타입

그림:check.gif

  • 파일을 전송할 때는 반드시 post 방식과 entype을 “multipart/form-data” 타입으로 지정해야 한다.


[편집] <s:textfield />

  • HTML에 text 박스를 준다.
  • 사용 예)
<s:textfield label="ID" labelposition="left" name='user.id' tooltip="새로운ID를 등록하세요" />
  • label
    • text 박스 앞에 제목을 달 때 사용한다.
  • labelposition
    • label의 위치를 지정한다.
    • "top", "left" 만 가능하다
  • name
    • element를 가져올 때 사용. 받아오는 user.id 가 있으면 뿌려준다.(사용자 수정인 경우)
    • 받아오는 user.id가 없다면 빈 text박스로 나타난다.(사용자 등록인 경우)
    • tooltip 마우스를 갖다 대면 말풍선이 나타난다.

[편집] <s:select />

  • 항목선택의 HTML tag를 준다.
  • 사용 예)
<s:select label = "address"  name='user.addressCodeId' list='addressSelectList' listKey='id' listValue='name' emptyOption= "true"
tooltip="주소를 선택하세요,"headerKey="None" headerValue="None"/>
  • list, listKey, listValue
    • action에서 addressSelectList라는 객체를 받아와 DB에서 그 객체에 있는 데이터들의 id를 찾아 그 id에 해당되는 value값을 항목들로 나타낸다.
    • category가 address에 속하는 데이터의 id를 찾아 그 id에 해당되는 Value값을 select list에 나타낸다.
  • emptyOption
    • select list에 빈값를 넣을 수 있다.
    • type가 boolean이다.
    • Default는 false이다.
  • headerKey,headerValue
    • select list의 맨위에 나타낸다.
    • emptyOption과 같이 이 항목을 선택하면 DB에는 빈값으로 들어간다.그래서 위와 같이 선택항목이 "None" 일 때 주로 쓰인다.
    • headerKey,headerValue 둘 다 필요하다.

[편집] <s:textarea />

  • textarea보다 큰 text 상자가 필요할 때 사용한다.
  • theme가 'xhtml'이냐 'ajax' 이냐에 따라서 틀린 창이 나타난다.
  • 사용 예)
<s:textarea label = "Comments" name='user.description'  cols='20' rows="8" tooltip="특히사항을 입력하세요."/>
  • cols
    • text 상자의 길이를 지정한다.
    • type이 integer이다.
  • rows
    • text 상자의 높이를 지정한다.
    • type이 integer이다.

[편집] <s:datatimepicker />

  • 옆에 달력 아이콘이 있어 날짜를 선택하면 그 날짜가 등록이 된다.
  • 사용 예)
<s:datetimepicker label = "RegDate" name='user.regDate' endDate='2007-07-20' displayFormat='yyyy. MM. dd' 
    tooltip="등록하는 날짜를 선택하세요."/>
  • endDate
    • 등록할 수 있는 날짜의 마지막날을 정한다.
    • default는 2941-10-12로 되어 있다.
    • type은 date이다.
  • displayFormat
  • 날짜의 표현방식을 정할 수 있다.
    • y : 년
    • M : 달
    • d : 월에 대한 일
    • D : 년에 대한 일
    • H : 시간(1시~12시로 표현
    • h : 시간(0시~24시로 표현
    • 달력에는 일까지만 선택할 수 있도록 되어 있어 시간은 무조건 12시로 표시된다.

그림:forbidden.gif

  • displayFormat에서 사용하는 날짜의 표현방식과 DB에서 사용되는 표현방식이 일치해야한다.
  • 그렇지 않으면 오류발생!!

[편집] <s:radio />

  • 버튼으로 항목들 중 하나를 선택할 수 있도록 한다.
  • 사용 예)
<s:radio  label = "Gender" name='user.gender'  list='genderRadioList' listKey='id'  listValue='name'  
    tooltip="성별을 선택하세요," />
  • list, listKey, listValue
    • action에서 genderRadioList라는 객체를 받아와 DB에서 그 객체에 있는 데이터들의 id를 찾아 그 id에 해당되는 value값을 항목들로 나타낸다.

[편집] <s:iterator />

  • value를 반복할 때 사용한다.
  • 주로 list 조회를 할 때 많이 사용된다.
  • 사용 예)
    <s:iterator value="userList">
  </s:iterator>
  • value
    • action에서 받아오는 value
    • 위의 소스에서는 action의 userList라는 객체를 받아오고 있다.

[편집] NON UI tag

[편집] <s:if />

    <s:if test="${board.idx == idx}">
        <!-- 현재 내용을 보고 있는 글 앞에 화살표 표시 -->
        <font color='#FF9900'>▶</font>
        </s:if>

[편집] <s:param />

  • 다른 tags들을 파라미터화하는데 사용된다.
  • name과 value라는 두개의 parameter를 가진다.
  • name은 String 유형이고,
  • value는 Object 유형이다.
  • 사용 예)
  <td><a href="<s:url action="viewUser"><s:param name="user.id" value="id"/></s:url>">
  • parameter 하나를 만드는데 name은 "user.id" 이고, value는 "id"이다.
  • 이 parameter는 href된 "viewUser"라는 action에 넘겨줄 때 사용된다.



[편집] 참조문서