2016-10-26 7 views
1

저는 Struts2의 초보자입니다. 유효성 검사 프레임 워크를 사용하여 양식의 입력 데이터의 유효성을 검사하려고 시도했을 때 문제가 발생했습니다. 유효성 검사기가 전혀 작동하지 않습니다. 아무것도 입력하지 않고 유효성 검사를 통과하면 리턴되어야하는 페이지를 얻을 수 있습니다.xml 구성의 Struts2 유효성 검사기가 작동하지 않습니다.

다음은 내 코드 및 패키지입니다. StackOverFlow에서 검색했지만 내 문제를 해결하는 솔루션을 찾지 못했습니다.

The structure of the project

Register.java

package validation; 
/** 
* Created by xiangang.wei on 2016/10/26. 
*/ 
public class Register { 
    private String userName; 
    private String password; 
    private String rpassword; 
    private int age; 
    private int phone; 
    private String email; 

    public String getRpassword() { 
     return rpassword; 
    } 

    public void setRpassword(String rpassword) { 
     this.rpassword = rpassword; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

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

    public void setPhone(int phone) { 
     this.phone = phone; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getUserName() { 

     return userName; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public int getAge() { 
     return age; 
    } 

    public int getPhone() { 
     return phone; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public String execute(){ 
     return "success"; 
    } 
} 

등록-validation.xml

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE validators PUBLIC 
     "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
     "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 


<validators> 
    <validator type="stringlength" > 
     <param name="fieldName">userName</param> 
     <param name="maxLength">10</param> 
     <param name="minLength">1</param> 
     <message>The length is wrong!</message> 
    </validator> 
    <validator type="fieldexpression"> 
     <param name="fieldName">password</param> 
     <param name="expression">![CDATA[password == rpassword]]</param> 
     <message>The password is not the same!</message> 
    </validator> 
    <validator type="int"> 
     <param name="fieldName">age</param> 
     <param name="max">130</param> 
     <param name="min">1</param> 
     <message>The age must be 1 - 130</message> 
    </validator> 
    <validator type="email"> 
     <param name="fieldName">email</param> 
     <message> Please enter a valid email address!</message> 
    </validator> 
</validators> 

struts.xml

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE struts PUBLIC 
     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
     "http://struts.apache.org/dtds/struts-2.3.dtd"> 

<struts> 
<package name="register" extends="struts-default" namespace="/"> 
    <action name="register" class="validation.Register"> 
     <result name="success">/register-view/register-success.jsp</result> 
     <result name="input">/index.jsp</result> 
    </action> 
</package> 
</struts> 

web.xml의

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 


    <filter> 
     <filter-name>struts2</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>struts2</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

build.gradle

group 'xiangang.wei' 
version '1.0-SNAPSHOT' 

apply plugin: 'java' 
apply plugin: 'war' 

sourceCompatibility = 1.8 

repositories { 
    jcenter() 
} 

dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.11' 
    compile 'org.apache.struts:struts2-core:2.5' 
} 

index.jsp를

<%@ taglib prefix="s" uri="/struts-tags" %> 
<%-- 
    Created by IntelliJ IDEA. 
    User: xiangang.wei 
    Date: 2016/10/26 
    Time: 11:19 
    To change this template use File | Settings | File Templates. 
--%> 
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
<head> 
    <title>User Register!</title> 
</head> 
<body> 
<s:form action="register" method="POST"> 
    <table> 
     <tr> 
      <td><s:textfield label="Name" name="userName"/></td> 
     </tr> 
     <tr> 
      <td><s:password label="Password" name="password"/></td> 
     </tr> 
     <tr> 
      <td><s:password label="Confirm Password" name="rpassword"/></td> 
     </tr> 
     <tr> 
      <td><s:textfield label="age" name="age"/></td> 
     </tr> 
     <tr> 
      <td><s:textfield label="Phone" name="phone"/></td> 
     </tr> 
     <tr> 
      <td><s:textfield label="Email" name="email"/></td> 
     </tr> 
     <tr> 
      <td> 
       <s:submit value="Submit"/> 
      </td> 
      <td> 
       <s:reset value="Reset"/> 
      </td> 
     </tr> 
    </table> 
</s:form> 
</body> 
</html> 

레지스터 success.jsp

+0

@Roman C 내 질문에 답변 해 주셔서 감사합니다. 다른 질문에서 귀하의 답변을 읽었으며 좋은 답변입니다. 유효성 검사기 사용 방법이 설명되어 있습니다. 그러나 나는 아직도 내 문제를 해결하지 못한다고 생각한다. Andrea Ligios가 말한 것처럼 ActionSupport 클래스를 확장하더라도 유효성 검사기는 여전히 죽었습니다! 그것은 전혀 작동하지 않습니다. –

+0

솔직히 문제를 해결하기 위해 지금까지 무엇을 했습니까? 당신은 SO가 도움을 제공하지 않고 당신의 문제를 해결하지 않는다는 것을 알아야합니다. 사람들이 좋은 질문을하고 좋은 답변을받는 Q & A 사이트이므로 모두가 독서를 즐긴다. 당신과 같은 질문은 전적으로 사적입니다. 프로그래밍에 문제가 있거나 특정 분야에 지식이 부족한 경우라면 SO 외부에서 배워야합니다. 질문의 주제를 이해하지 못하면 당신을 도울 수 없습니다. –

답변

0

유효성 확인은 Validation Interceptor에 의해 수행됩니다. 그 문서에서 :

이 인터셉터는 다시 모든 유효성 검사 규칙에 대한 조치 (예 : ActionClass-validation.xml 같은 파일에 있음) 확인 및 필드 수준의 조치를 추가하는 표준 검증 프레임 워크를 통해 작업을 실행 수준의 오류 메시지 (, 작업의 경우 ValidationAware 구현).

액션 (즉, 다른 많은 것들 중, ValidationAware 구현) ActionSupport을 연장하거나 수동으로 ValidationAware를 구현하지 않습니다.

단순히 프레임 워크에 동작 확인을 지시하지 않았습니다.

황금률로 항상 행동을 연장하십시오 ActionSupport.

ActionSupport으로 확장되는 BaseAction을 만들면 일반적인 로직과 설정을 넣을 수 있습니다 (예 : Locale/TimeZone, 날짜 구문 분석 형식 등 ... 그리고 BaseAction을 확장합니다.


편집

최근 Struts2 버전에서

의 DTD가 변경; in the docs 설명이

<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" 
          "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> 

로하여이

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 

대체.

+0

작동 했습니까? 응답이 작동하는 경우 응답을 받아 들여야 함을 기억하십시오. –

+0

안녕하세요, 당신은 ActionSupport 클래스를 확장하지 않은 것에 대해 옳습니다. 그래서 ActionSupport 클래스를 확장하지만 작동하지 않는 것 같습니다! 유효성 검사가 여전히 작동하지 않습니다. –

+0

Struts 2.5.1을 사용하고 있으며 validator.xml에서 1.0.3 대신 1.0으로 내 DTD를 롤업해야했습니다. 단일 버전 만 검사 한 사용자에게 유용 할 수 있습니다. –