본문 바로가기

프레임워크/Struts2

struts2 폼데이타 간단처리(전송)

struts2를 하면서 정말 편한점 하나는 개인적으로 폼데이타를 넘길때라고 생각한다.(struts1도 비슷하다)
set, get메소드만 있으면 다 해결되니 말이다.

소개정도는 아니지만 실제로 응용 가능한 간단한 소스를 만들고 테스트를 한 파일을 올린다.
(물론 구글링이나 다른 검색으로도 수많은 소스가 나온다 ㅋㅋ)

1. testRegister.jsp(구찮아서 그냥 하나의 파일에 다 만들엇다..)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<s:form name="form1" action="testRegister.action" method="POST">
id : <s:textfield name="testDto.id"/><br>
name : <s:textfield name="testDto.name"/><br>
age : <s:textfield name="testDto.age"/><br>
sex : <s:textfield name="testDto.sex"/>
<s:submit value="저장"/>
</s:form>
<br>
<br>
id : <s:property value="testDto.id"/><br>
name : <s:property value="testDto.name"/><br>
age : <s:property value="testDto.age"/><br>
sex : <s:property value="testDto.sex"/>

</body>
</html>

2. TestRegisterDTO.java
package test;

public class TestRegisterDTO{
 private String id;
 private String name;
 private int age;
 private String sex;
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
}

3-1. TestRegisterAction.java(액션클래스에 직접 set, get메소드를 만드는경우)
package test;

public class TestRegisterAction{
 private String id;
 private String name;
 private String age;
 private String sex;
 
 public String execute() throws Exception{
  
  return "success";
 }

 public String getId() {
  return id;
 }

 public void setId(String id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getAge() {
  return age;
 }

 public void setAge(String age) {
  this.age = age;
 }

 public String getSex() {
  return sex;
 }

 public void setSex(String sex) {
  this.sex = sex;
 }
}


3-2. TestRegisterAction.java(DTO클래스만 만드는경우)
package test;

public class TestRegisterAction{
 private TestRegisterDTO testRegisterDto;
 
 public String execute() throws Exception{
  
  return "success";
 }

 public TestRegisterDTO getTestRegisterDto() {
  return testRegisterDto;
 }

 public void setTestDto(TestRegisterDTO testRegisterDto) {
  this.testRegisterDto = testRegisterDto;
 }
}

4.struts.xml
<action name="testRegister" class="test.TestRegisterAction">
         <result>/testRegister.jsp</result>
</action>


3-1, 3-2는 각자 쓰기나름이지만 3-1의 방법으로 한다면, 넘겨야할 데이타가 100개라면....ㅎㄷㄷ set, get메소드만 하더라도...그 다음은 알아서 상상을...
모두가 추천하지만 3-2의 방식을 추천한다. 다들 알고있겠지만 데이타가 들어가는 조건은 폼의 필드명과 같은 멤버필드와 set, get메소드만 있으면 된다.
이제 다 만들었으면 실행을 해보자.(따로 언급은 안했지만 환경은 struts2.1.6, 톰캣5.5를 사용했다.)

testRegister.jsp 실행화면



데이타 입력화면


저장클릭 완료화면



잘된다...;;
여기서 중요한것은 액션클래스에서 set, get메소드를 사용할 경우 view페이지에서 폼필드나 데이타가 뿌려지는 부분에

<s:textfield name="id"/>, <s:property value="id"/>

이렇게 쓰면 되지만, DTO클래스를 이용하는경우에는

<s:textfield name="testDto.id"/>, <s:property value="testDto.id"/>

이런식으로 써야된다.