有关Struts2.1表单本地验证

  Struts2的表单验证很方便,直接用标签就可以实现,无论是本地还是服务器文件,真感觉是方便到家了。

  最近实验本地验证,但是出了很多问题,写在这里跟大家分享一下。

  如何来用struts2的表单验证,大家可以去看专门的教程去。在这里我看的是李刚写的<Struts2权威指南>.按它上面写的步骤一步一步搭建起来之后,出了很多问题。首先有几点是要注意的:

比如类似下面的警告,就是action和namespace没有设置正确引起的。

6HWQE$05ZHZF9E{(PQ[Y][J[4]

  1. 需要在页面的Head里加入<s:head/>,这里默认的是用xhtml这种theme,注意不能是simple
  2. <s:form..>标签里需要指定action和namespace,而不能直接把包的路径写在Action属性里面,否则一定会出错的。
  3. Action里面指定的Action的名,不要加后缀
  4. 如果要使用ajax主题,则还需要引入dwr这个包,Struts2.1.8版本中集成的是1.1.1这个版本,但是我在网上找到的最新的是version 3,没有去研究它们是不是一个版本,但是我还是喜欢用更新的。、

 

下面是的我实验工程的相关代码:

/validation/src/cn/ijser/Actions/RegistAction.java

   1: package cn.ijser.Actions;

 

   2:  

 

   3: import java.util.Date;

 

   4:  

 

   5: import com.opensymphony.xwork2.ActionSupport;

 

   6:  

 

   7: public class RegistAction extends ActionSupport {

 

   8:  

 

   9:     private static final long serialVersionUID = 1L;

 

  10:     private String name;

 

  11:     private String pass;

 

  12:     private int age;

 

  13:     private Date birth;

 

  14:     

 

  15:     public String execute() {

 

  16:         System.out.println("in action");

 

  17:         return SUCCESS;

 

  18:     }

 

  19:     public String getName() {

 

  20:         return name;

 

  21:     }

 

  22:     public void setName(String name) {

 

  23:         this.name = name;

 

  24:     }

 

  25:     public String getPass() {

 

  26:         return pass;

 

  27:     }

 

  28:     public void setPass(String pass) {

 

  29:         this.pass = pass;

 

  30:     }

 

  31:     public int getAge() {

 

  32:         return age;

 

  33:     }

 

  34:     public void setAge(int age) {

 

  35:         this.age = age;

 

  36:     }

 

  37:     public Date getBirth() {

 

  38:         return birth;

 

  39:     }

 

  40:     public void setBirth(Date birth) {

 

  41:         this.birth = birth;

 

  42:     }

 

  43:     

 

  44:     

 

  45: }

 

 

/validation/src/cn/ijser/Actions/RegistAction-validation.xml

   1: <;?xml version="1.0" encoding="utf-8"?>

 

   2: <;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"

 

   3:        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">;

 

   4: <validators>

 

   5:     <;field name="name">

 

   6:         <;field-validator type="requiredstring">

 

   7:             <;param name="trim">true</param>

 

   8:             <;message>必须输入名字</message>

 

   9:         <;/field-validator>

 

  10:         

 

  11:         <;field-validator type="regex">

 

  12:             <;param name="expression"><![CDATA[(/w{4,25})]]></param>

 

  13:             <;message>用户名只能是字母和数字,且长度在4-25之间</message>

 

  14:         <;/field-validator>

 

  15:     <;/field>

 

  16:     <;field name="pass">

 

  17:         <;field-validator type="requiredstring">

 

  18:             <;param name="trim">true</param>

 

  19:             <;message>必须输入密码</message>

 

  20:         <;/field-validator>

 

  21:         <;field-validator type="regex">

 

  22:             <;param name="expression"><![CDATA[(/w{4,25})]]></param>

 

  23:             <;message>密码只能是字母和数字,且长度在4-25之间</message>

 

  24:         <;/field-validator>

 

  25:     <;/field>

 

  26:     <;field name="age">

 

  27:         <;field-validator type="int">

 

  28:             <;param name="min">0</param>

 

  29:             <;param name="max">150</param>

 

  30:             <;message>年纪在1-25之间 </message>

 

  31:         <;/field-validator>

 

  32:     <;/field>

 

  33:     <;field name="birth">

 

  34:         <;field-validator type="date">

 

  35:             <;param name="min">1900-01-01</param>

 

  36:             <;param name="max">2050-02-21</param>

 

  37:             <;message>年纪在</message>

 

  38:         <;/field-validator>

 

  39:     <;/field>

 

  40: </validators>

 

 

/validation/src/struts.xml

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

 

   2: <;!DOCTYPE struts PUBLIC

 

   3:     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

 

   4:     "http://struts.apache.org/dtds/struts-2.0.dtd">;

 

   5: <struts>

 

   6:     <;constant name="struts.devMode" value="true" />

 

   7:     <;constant name="struts.multipart.saveDir" value="/upload" />

 

   8:     <;constant name="struts.multipart.maxSize" value="259715200" />

 

   9:     <;constant name="struts.action.extension" value="do,action" />

 

  10:  

 

  11:     <;package name="default" namespace="/" extends="struts-default">

 

  12:         <;action name="index">

 

  13:             <;result name="success">/index.jsp</result>

 

  14:         <;/action>

 

  15:  

 

  16:     <;/package>

 

  17:     <;package name="admin" namespace="/admin" extends="struts-default">

 

  18:         <;action name="regist" class="cn.ijser.Actions.RegistAction">

 

  19:             <;result>/index.jsp</result>

 

  20:             <;result name="input">/index.jsp</result>

 

  21:         <;/action>

 

  22:     <;/package>

 

  23: <;/struts>

 

 

/validation/WebRoot/index.jsp

   1: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

   2: <%@ taglib uri="/struts-tags" prefix="s" %>

 

   3: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

 

   4: <html>

 

   5:   <head>

 

   6:     <s:head/>

 

   7:     <title>My JSP 'index.jsp' starting page</title>

 

   8:     <meta http-equiv="pragma" content="no-cache">

 

   9:     <meta http-equiv="cache-control" content="no-cache">

 

  10:     <meta http-equiv="expires" content="0">    

 

  11:   </head>

 

  12:   

 

  13:   <body>

 

  14:  

 

  15:       <s:form action="regist" namespace="/admin" validate="true">

 

  16:           <s:textfield name="name" label="用户名" value="yourname"></s:textfield>

 

  17:           <br/>

 

  18:           <s:textfield name="pass" label="密 码" value="abc"></s:textfield>

 

  19:           <br/>

 

  20:           <s:textfield name="age" label="年龄" value="20"></s:textfield>

 

  21:           <br/>

 

  22:           <s:textfield name="birth" label="生日" value="1987-10-10"></s:textfield>

 

  23:           <br/>

 

  24:           <s:submit></s:submit>

 

  25:       </s:form>

 

  26:       

 

  27:   </body>

 

  28: </html>

 

 

 

上面这段代码没有什么问题,但是要注意访问的时候,如果是直接访问index.jsp,就会出现下面的错误:

image

通过查看本地的页面源代码可以看出,javascript本地验证代码并没有生成,而是生成了一堆错误,是空指针错误。

只有通过Action来访问jsp页面才可以正常生成js验证脚本代码,比如:http://localhost:8080/validation/index.do.  这一点官方的文档里并没有说明。

正常的本地验证,页面不会跳转,也就是说,浏览器地址栏的内容不会改变。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值