struts2通过validetor验证可以直接生成js验证。struts1就没试过了。

解决方案 »

  1.   

    错误如下,请问3,4楼的具体实现怎么做:
    严重: Servlet.service() for servlet jsp threw exception
    org.apache.jasper.JasperException: /form/login.jsp(10,2) Attribute name invalid for tag form according to TLD
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:236)
    at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1198)
    at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:819)
    at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1507)
    at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2338)
    at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2388)
    at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2394)
    at org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
    at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2338)
    at org.apache.jasper.compiler.Validator.validate(Validator.java:1737)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:178)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:306)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
      

  2.   

    请把struts-config.xml文件里对reg的配置贴出来<%@ page language="java" pageEncoding="UTF-8"%> 
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> 
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html> 
    <head> 
    <title>JSP for RegForm form </title> 
    </head> 
    <body> 这里的form是不能指定name的,struts会根据action对应的formbean为该表单起名字
    <html:form name="form" action="/reg" onSubmit="return check();"> 
    username : <html:text property="username" name="username" /> 
    <html:errors property="username" /> 
    <br /> 
    password : <html:password property="password" name="password" /> 
    <html:errors property="password" /> 
    <br /> 
    cpassword : <html:password property="cpassword" name="cpassword" /> 
    <html:errors property="cpassword" /> 
    <br /> 
    name : <html:text property="name" name="name" /> 
    <html:errors property="name" /> 
    <br /> 
    ID : <html:text property="ID" /> 
    <html:errors property="ID" /> 
    <br /> 
    <html:submit /> 
    <html:cancel /> 
    </html:form> 
    </body> 
    </html> 
    <script language="javascript" type="text/javascript"> 
    function check() { 
    if (document.forms[0].username.value == "") { 
    alert("用户名不能为空"); 
    return false; 

    if (document.form.password.value != document.form.cpassword.value) { 
    alert("密码不一致"); 
    return false; 

    if (document.form.name.value == "") { 
    alert("名字不能为空"); 
    return false; 
    } else { 
    return true; 


    </script> 
      

  3.   

    没想到用validetor,只是简单的配了下:
    <action attribute="regForm" input="/user/reg.jsp" name="regForm"
    path="/reg" scope="request"
    type="org.springframework.web.struts.DelegatingActionProxy">
    <forward name="ok" path="/ok.jsp" />
    <forward name="fail" path="/msg.jsp" />
    </action>
      

  4.   

    html:form 标签的name属性是不能指定的,它是自动生成的,根据struts-config.xml里的配置而该表单下所有使用struts标签的元素的name属性都是html:form 表单的最后生成的name名字+property属性名字
      

  5.   

    也就是regForm;regFormusername;regFormpassword,.....咯?
      

  6.   

    http://wiki.javascud.org/display/ww2cndoc/Validation
    贴个地址,webwork中关于validator验证的资料,运用其支持的拦截器,会自动生成js验证。
      

  7.   


    <%@ page language="java" pageEncoding="UTF-8"%> 
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> 
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html> 
    <head> 
    <title>JSP for RegForm form </title> 
    </head> 
    <body>
    <html:form action="/reg" onSubmit="return check();"> 
    username : <html:text property="username" name="username" /> 
    <html:errors property="username" /> 
    <br /> 
    password : <html:password property="password" name="password" /> 
    <html:errors property="password" /> 
    <br /> 
    cpassword : <html:password property="cpassword" name="cpassword" /> 
    <html:errors property="cpassword" /> 
    <br /> 
    name : <html:text property="name" name="name" /> 
    <html:errors property="name" /> 
    <br /> 
    ID : <html:text property="ID" /> 
    <html:errors property="ID" /> 
    <br /> 
    <html:submit /> 
    <html:cancel /> 
    </html:form> 
    </body> 
    </html> 
    <script language="javascript" type="text/javascript"> 
    function check() { 
    if (document.getElementsByName("regForm.username")[0].value == "") { 
    alert("用户名不能为空"); 
    return false; 

    if (document.getElementsByName("regForm.password")[0].value != document.getElementsByName("regForm.cpassword")[0].value) { 
    alert("密码不一致"); 
    return false; 

    if (document.getElementsByName("regForm.name")[0].value == "") { 
    alert("名字不能为空"); 
    return false; 
    } else { 
    return true; 


    </script>
      

  8.   

    <html:text property="username" name="username" /> 这里可以再加一个StyleId属性<html:text property="username" name="username" styleID="UserName"/> 在js中用if (document.form[0].UserName.value == "") { 
    alert("用户名不能为空"); 
    return false; 
      

  9.   

    从你贴出来的错误可知:首先你代码第10行:
    <html:form name="form" action="/reg" onSubmit="return check();"> 
    提示你标签属性不匹配,你仔细检查可知,<html:form>标签中name属性是错误的,因为,系统会根据你的action 
    配置自动找到它所匹配的form的。再者:错误显示:
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:236) 
    错误提示你,你的错误虽然用<html:errors>抛出,如
    <html:errors property="username" /> 
    但在你的.properties文件中是否设置了你所抛出的错误
    还有系统提示你错误的转向,你检查一下在你的action配置中,转向是否正确,或转向的文件是否存在?
    3,4楼朋友说的用验证框架这是个不错的处理方法,你现在在js页面中用javascript来验证,安全性不好,而且不够灵活,struts提供的validator就是解决这个问题的好方法,楼主可以找本书看一下。当然你也可以在form中使用validate()方法对数据进行判断,很多种,楼主自己选择。其实在遇到这么多错误是一定要把系统提示你的错误检查一下,高清楚是哪儿的问题,单词不会可以查,这是个很好的学习方法,解决一个问题后再运行一下,看相关的错误是否也解决了,知道运行正确为止这里我也只能把前几个错误提示帮楼主解释一下,下面还有好多,比如对中文处理问题,楼主没有做好,希望楼主好好看看,楼上朋友只是解决了一至两个问题,还需要楼主自己啊!加油!
      

  10.   

    首先非常感谢大家,
    非常感谢14楼,
    11楼的方法还是有不对的地方onSubmit也不能用。
      

  11.   

    支持14楼  
    ActionErrors erros = new ActionErrors();
    if (use == null || "".equals(use)) {
        erros.add("uid",new ActionMessage("is not null !", false));
    }如果是这样设置 还用到.properties国际化转换文件中编辑错误提示吗?
    这点搞不明白 但界面没反馈错误提示