Struts2에 대한 기초 지식을 갖춘 개발자들을 위해, 이번 글에서는 액션이 파라미터를 수신하는 세 가지 방식과 간단한 폼 검증 구현 방법을 소개하겠습니다. 먼저 가장 기본적인 액션 파라미터 수신 방식부터 시작하겠습니다. 액션 클래스에 멤버 변수를 직접 추가하여 파라미터 수신을 구현할 수 있습니다. 로그인 검증을 예시로 코드를 살펴보겠습니다.
먼저 액션 클래스는 다음과 같습니다:
/***
* 기본적인 파라미터 수신 방식
*/
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {
private String username;
private int userPassword;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getUserPassword() {
return userPassword;
}
public void setUserPassword(int userPassword) {
this.userPassword = userPassword;
}
public String authenticate(){
System.out.println("Username="+username+" Password="+userPassword);
if(123456==userPassword){
return SUCCESS;
}else{
return ERROR;
}
}
}
다음으로 두 번째 파라미터 수신 방식은 도메인 모델 객체를 사용하는 방법입니다. 먼저 사용자 정보를 담을 클래스를 생성합니다:
public class UserInfo {
private String username;
private String userPassword;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
}
그 다음 액션 클래스에서 이 객체를 통해 파라미터를 수신합니다:
/***
* 도메인 모델 방식
*/
@SuppressWarnings("serial")
public class UserAuthenticationAction extends ActionSupport {
private UserInfo userInfo;
public UserInfo getUserInfo() {
return userInfo;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
public String authenticate(){
System.out.println("Username="+userInfo.getUsername()+" Password="+userInfo.getUserPassword());
return SUCCESS;
}
}
마지막으로 Struts의 ModelDriven 인터페이스를 사용하는 방식입니다. 첫 번째로 사용자 객체를 생성하고, 두 번째로 액션을 구성합니다:
/***
* 모델 드리븐 방식
*/
@SuppressWarnings("serial")
public class UserLoginAction extends ActionSupport implements ModelDriven<UserInfo>{
private UserInfo userInfo = new UserInfo();
public String authenticate(){
System.out.println("Username="+userInfo.getUsername()+" Password="+userInfo.getUserPassword());
return SUCCESS;
}
public UserInfo getModel() {
return userInfo;
}
}
ModelDriven 방식은 엔티티 클래스를 페이지 데이터 수집 객체로 직접 사용하는 것을 의미합니다.
간단한 폼 검증에 대해 addFieldError() 메서드를 소개하겠습니다:
@SuppressWarnings("serial")
public class InputValidationAction extends ActionSupport{
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
public String validateLogin(){
System.out.println(username+"");
if(username!=null && username.equals("admin")){
return SUCCESS;
}else{
this.addFieldError("usernameError", "유효하지 않은 사용자 이름입니다");
this.addFieldError("usernameError", "목록 형식으로 오류 정보 출력");
return ERROR;
}
}
}
오류 처리 페이지는 다음과 같습니다:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<base href="<%=basePath%>">
<title>오류 페이지</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
작업 실패 <br>
입력된 파라미터: <s:text name="username" /><br/>
<s:fielderror fieldName="usernameError" theme="simple"/><br/>
<s:property value="errors.usernameError[0]"/><br/>
<s:debug></s:debug>
</body>
</html>
이번 글에서 소개한 내용은 비교적 간단하여 쉽게 익힐 수 있을 것입니다. 추가적인 내용은 지속적으로 업데이트될 예정입니다.