Struts2에서 액션 파라미터 수신 방식 및 기본 폼 검증

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>

이번 글에서 소개한 내용은 비교적 간단하여 쉽게 익힐 수 있을 것입니다. 추가적인 내용은 지속적으로 업데이트될 예정입니다.

태그: struts2 액션 파라미터 폼 검증 ModelDriven

6월 19일 21:54에 게시됨