首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • struts2中怎样用validation框架验证?还要用转换器么? [已结贴,结贴人:flying99]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flying99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-20 14:06:00 楼主
    struts2中怎样用validation框架验证?还要用转换器么?
    我用struts2的validattion作框架验证是发生错误,代码如下。
    index.jsp
    HTML code
    <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>longin</title> </head> <body> <h3>注册</h3> <s:form action="LoginAction" validate="true"> <s:textfield name="username" label ="username:" /> <s:textfield name="psd" label="psd: "/> <s:textfield name="age" label="age: "/> <s:textfield name="date" label="date: "/> <s:submit /> </s:form> </body> </html>

    LoginAction.java
    Java code
    package tutorial; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String username; private String psd; private String age; private String date; public String getusername() { return username; } public void setusername(String username) { this.username = username; } public String getpsd() { return psd; } public void setpsd(String psd) { this.psd = psd; } public String getage() { return age; } public void setage(String age) { this.age = age; } public String getdate() { return date; } public void setdate(String date) { this.date = date; } public String execute() throws Exception { System.out.println("servlet.............."); return SUCCESS; } }

    web.xml
    XML code
    <web-app> <display-name>Struts 2.0 Hello World</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

    struts.xml
    XML code
    <?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> <package name="tutorial" extends="struts-default"> <action name="LoginAction" class="tutorial.LoginAction"> <result>/output.jsp</result> <result name="input">/index.jsp</result> </action> </package> </struts>

    LoginAction-validation.xml
    XML code
    <?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="username"> <field-validator type="requiredstring"> <message>name is required</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">3</param> <param name="maxLength">10</param> <message>userName should be between 3 and 10</message> </field-validator> </field> <field name="psd"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>password is required</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">5</param> <param name="maxLength">16</param> <message>password should be between 5 and 16</message> </field-validator> </field> <field name="age"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>age is required</message> </field-validator> <field-validator type="int"> <!--加入这个判断数字大小的验证时出错,是不是少了转换器,怎样修改??--> <param name="min">20</param> <param name="max">100</param> <message>age should be between 20 and 100</message> </field-validator> </field> </validators>

    在LoginAction-validation.xml加入
    <field-validator type="int">               
                <param name="min">20 </param> 
                <param name="max">100 </param> 
                <message>age should be between 20 and 100 </message> 
    </field-validator>
    这个验证时出错,出错是不是String型没有转成int型,怎么修改??
    错误
    type Exception report

    message

    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception

    javax.servlet.ServletException: java.lang.Integer
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:518)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)


    root cause

    java.lang.ClassCastException: java.lang.Integer
    java.lang.String.compareTo(String.java:90)
    com.opensymphony.xwork2.validator.validators.AbstractRangeValidator.validate(AbstractRangeValidator.java:29)
    com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:215)
    com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:109)
    com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:96)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:142)

    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flying99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 14:12:561楼 得分:0
    补充一下,
    作 <field-validator type="requiredstring">  这种验证的是时候都是正确,但用到int date等校验的时候就有错误,是类型没有转换么?怎样转?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • clarck_913
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 14:23:212楼 得分:0
    这是类型转换异常

    你在页面上输入年龄的时候输入的是数字吗??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flying99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 14:35:433楼 得分:0
    年龄输入是数字
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • norwolfli
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 14:39:274楼 得分:50
    private String age;

    改成 private Integer age;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • newchengse
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 14:57:525楼 得分:50
    private String age;
        private String date;
    这两个地方有错误,你需要接收的是:

    private int age;
    private Date date;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flying99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:01:466楼 得分:0
    是的,错误找到了,非常感谢!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flying99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:30:127楼 得分:0
    刚才的错误解决了,现在我在LoginAction-validation.xml中加入
    XML code
    <field name="date"> <field-validator type="required"> <message>date is required</message> </field-validator> </field>

    LoginAction.java中也改为
    private Date date;
    现在验证通过页面转到http://localhost:8080/validtest2/LoginAction.action
    tomcate不报错,
    页面上 date输入框上提示 Invalid field value for field "date". date is required

    这个怎么改?应该是date型不匹配??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flying99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:37:048楼 得分:0
    哦,不加
    XML code
    <field name="date"> <field-validator type="required"> <message>date is required</message> </field-validator> </field>

    也是一样的错误,应该是Action中Date类型的问题?
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved