原创作者: 饕尽天下   阅读:8467次   评论:3条   更新时间:2011-06-01    

Struts中的Date validator检查一个指定的日期是否在指定的范围,如果值不在指定的范围内,它将生成错误信息.

错误信息由<message></message>标签提供.下面的例子将向大家演示如何使用date validator来检查输入范围.

[注意 : 如果没有指定date converter,那么XworkBasicConverter将会参与来进行日期转换,默认使用Date.SHORT格式(使用编程式指定的locale,否则回退到系统默认的locale)]

按照下面的步骤创建日期范围验证器 :

第一步 : 创建struts.xml文件,并添加如下xml代码 :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- Rose India Struts 2 Tutorials -->
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="roseindia" namespace="/roseindia" extends="struts-default">
    
    <!-- Add actions here -->

    <!-- date validation -->

    <action name="dateValidation">
      <result>/pages/dateInputForm.jsp</result>
    </action>

    <action name="dateValidation1" class="net.roseindia.DateVaLidationAction">
      <result name="input">/pages/dateInputForm.jsp</result>
      <result name="error">/pages/dateInputForm.jsp</result>
            <result>/pages/dateSuccess.jsp</result>
    </action>

         <!-- Add actions here -->
    </package>


    <!-- Add packages here -->

</struts> 

第二步 : 创建输入表单,也就是dateInputForm.jsp

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

<html>

<head>
<title>Input form</title>
 <link href="<s:url value="/css/main.css"/>" rel="stylesheet"
          type="text/css"/>
      <s:head/>
</head>

<body>
  
  <s:form method="POST" action="dateValidation1">
   </td>
  </tr>
    <s:textfield label="Enter Joining Date of Employee" name="joiningdate"/>
    <s:submit />
  </s:form>

</body>

</html> 

第三步 : 创建一个Action

package net.roseindia;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.*;
import java.util.*;
import java.text.*;

public class DateVaLidationAction extends ActionSupport implements Validateable {

  private Date joiningdate=null;
  
  public void setJoiningdate(Date joiningdate){
    this.joiningdate = joiningdate;
  }
  public Date getJoiningdate(){
    return joiningdate;
  }
} 

第四步 : 在一个xml文件中创建Date validator

验证文件的格式是<ActionClassName>-validation.xml<ActionClassName>-<ActionAliasName>-validation.xml.

日期验证器 : 该验证器检查指定的日期是否在指定的范围内,如果日期是合法的且在指定的范围内,你将跳转到dateSuccess.jsp页面去,否则它将显示xml文件中指定的信息(例如:指定的日期必须在01/01/199001/01/2000之间).日期验证器有如下参数 :

l        fieldName : 验证器的字段名.如果使用Plain Validator语法它将是必填项.

l        min : 日期的最小范围,如果未指定,它将不会检查

l        max : 日期的最大范围,如果未指定,它将不会检查

DateVaLidationAction-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>

  <field name="joiningdate">
    <field-validator type="date">
      <param name="min">01/01/1990</param>
      <param name="max">01/01/2000</param>
      <message>Joining date must be supplied between ${min} and ${max}</message>
    </field-validator>
  </field>

</validators>

如果任何用户在text字段输入的任何日期都是有效的,那么dateSuccess.jsp页面将显示如下 :

  "Employee Joining Date: 12/11/1998 " message.

dateSuccess.jsp

<%@page language="java" %>
<html>

<head>
  <title>Correct entry</title>
</head>

<body>
<b>Employee Joining Date: </b><%=request.getParameter("joiningdate") %>
</body>

</html>

 

输出 :

当程序执行时,将会得到下面的页面 :

如果你输入错误的日期或文本你将会得到 :

如果你输入的日期在指定的范围以下 :

如果你输入的日期超出了指定的范围 :

如果你输入范围以内的日期 :

那么你将得到如下输出信息 :

  • 大小: 1.4 KB
  • 大小: 1.7 KB
  • 大小: 1.9 KB
  • 大小: 1.9 KB
  • 大小: 1.9 KB
  • 大小: 458 Bytes
评论 共 3 条 请登录后发表评论
3 楼 yangwei1030 2009-10-15 15:47
又没得啦,我把Projct清除了一个就行了
2 楼 yangwei1030 2009-10-15 15:45
me too ,有人会解决的吧?????
1 楼 yangqianyu222 2009-06-10 11:55
我按照上面配置之后,为什么出现如下错误
警告: Caught OgnlException while setting property 'min' on type 'com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator'.
java.lang.NoSuchMethodException: setMin(java.lang.String)
	at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:810)
	at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:964)
	at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:75)
	at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:131)
	at com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.setProperty(OgnlValueStack.java:68)
	at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1656)
	at ognl.ASTProperty.setValueBody(ASTProperty.java:101)
	at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
	at ognl.SimpleNode.setValue(SimpleNode.java:246)
	at ognl.Ognl.setValue(Ognl.java:476)


我在action 中 的类型是 java.util.Date ,怎么getter 之后却变成了String?

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics