From JCFWiKi
|
|
- 산출물 : JCF3.0™ Struts2 Taglibary 가이드
- 작성자: 김민아
- 작성일 : 2007/12/03
Copyright © 2007 Daewoo Information Systems Co., Ltd.
|
[편집] Struts2 Tag library
[편집] overview
|
|
- Struts framework는 veiw technology과 별도의 Tag library를 제공한다.
- JSPs에 제한적이 아니라, JSP, Velocity Freemarker 등 모든 view technologies에서 사용가능하다.
|
[편집] showcase
<%@ 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>
<a href='<%= request.getContextPath() %>/user/listUser.action'>LIST</a>
</body>
</html>
<%@ 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>
<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>
<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>
<a href='<%= request.getContextPath() %>/user/listUser.action'>LIST</a>
</body>
</html>
<%@ 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>
[편집] 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들이 있다.
|
|
- label과 tooltip은 "simple“과 “css_ xhtml“에서 적용되지 않는다.
|
- method
- HTML form method를 지정한다.
- Get, post가 있다.
- 파일을 전송할 때는 반드시 post 방식을 사용한다.
- enctype
- binary로 값을 넘길 때 사용
- Enctype을 사용하지 않아도 텍스트는 넘길 수 있으나 이미지나 실행파일은 넘길 수 없음.
- “multipart/form-data”: 웹상에서 파일을 전송할때 사용하는 하나의 인코딩타입
|
|
- 파일을 전송할 때는 반드시 post 방식과 entype을 “multipart/form-data” 타입으로 지정해야 한다.
|
[편집] <s:textfield />
<s:textfield label="ID" labelposition="left" name='user.id' tooltip="새로운ID를 등록하세요" />
- label
- 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시로 표시된다.
|
|
- 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에 넘겨줄 때 사용된다.
[편집] 참조문서