Struts2校验器验证出错没有跳转到input视图

真的是纸上得来终觉浅,绝知此事要躬行。

校验器配置的刚刚好,struts.xml写的刚刚好,Action也 “毛” 问题啊,就是校验出错怎么也不跳到input视图下,直接跳到成功页面,气死我也。

平时没继承ActionSupport也没什么事,这下翻车了。整了半天,帖子也翻了不少,仍旧没找到问题。突然灵机一动,input来自哪?在哪声明的?Action接口嘛!你都没实现Action接口,也没继承它的子类,人家凭什么给你返回input。so 继承一下就OK啦。

附上代码:

UserAction.java

package com.hncj.edu;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{
	private String address;
	private int age;
	private String password;
	private String repassword;
	private String userName;

	public String getAddress() {
		return address;
	}

	public int getAge() {
		return age;
	}

	public String getPassword() {
		return password;
	}

	public String getRepassword() {
		return repassword;
	}

	public String getUserName() {
		return userName;
	}

	public void setAddress(String address) {
		this.address = address;
	}

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

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

	public void setRepassword(String repassword) {
		this.repassword = repassword;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String save() {
		return "success";
	}
}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<package name="pack1" extends="struts-default">
		<action name="save" class="com.hncj.edu.UserAction" method="save">
			<result name="success">/save.jsp</result>
			<result name="input">/index2.jsp</result>
		</action>
	</package>
</struts>

关键是校验文件的写法,位置的放法:

命名规则:ActionName-validation.xml   (ActionName为类的名字) 该文件和action放在同一个包下。

该文件的dtd约束可以在 /struts2-core-2.5.16.jar /xwork-validator-1.0.3.dtd 文件中复制。

字段校验的类型可以在 com/opensymphony/xwork2/validator/validators/default.xml 文件中查找,有如下类型:

<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="creditcard" class="com.opensymphony.xwork2.validator.validators.CreditCardValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>

UserAction-validation.xml的示例写法:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
  		"-//Apache Struts//XWork Validator 1.0.3//EN"
  		"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
	<field name="userName">
		<field-validator type="requiredstring">
			<message>用户名不能为空</message>
		</field-validator>
	</field>
	<field name="password">
		<field-validator type="regex">
			<param name="regex">[a-zA-Z]{4,6}</param>
			<message>密码必须为4-6位大小写字母</message>
		</field-validator>
	</field>
	<validator type="expression">
		<param name="fieldName">repassword</param>
		<param name="expression">password==repassword</param>
		<message>两次密码不一致</message>	
	</validator>
	<validator type="int">
		<param name="fieldName">age</param>
		<param name="min">0</param>
		<param name="max">150</param>
		<message>年龄必须在${min}-${max}之间</message>
	</validator>
</validators>

index2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath}/save" method="post">
		<table>
			<caption>用户登录</caption>
			<tr>
				<td>用户名:</td>
				<td><input type="text" name="userName"/></td>
				<td><s:fielderror fieldName="userName"></s:fielderror></td>
			</tr>		
			<tr>
				<td>密码:</td>
				<td><input type="password" name="password"/></td>
				<td><s:fielderror fieldName="password"></s:fielderror></td>
			</tr>
			<tr>
				<td>重复密码:</td>
				<td><input type="text" name="repassword"/></td>
				<td><s:fielderror fieldName="repassword"></s:fielderror><s:actionerror/></td>
			</tr>
			<tr>
				<td>年龄:</td>
				<td><input type="text" name="age"/></td>
				<td><s:fielderror fieldName="age"></s:fielderror></td>
			</tr>
			<tr>
				<td>地址:</td>
				<td><input type="text" name="address"/></td>
				<td><s:fielderror fieldName="address"></s:fielderror></td>
			</tr>	
			<tr>
				<td><input type="submit" value="submit"/></td>
			</tr>
		</table>
	</form>
	<s:debug></s:debug>
</body>
</html>

save.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	save successfully
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值