错误信息:
FreeMarker template error!   
  
Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on com.opensymphony.xwork2.validator.validators.RequiredStringValidator@161c9d1  
The problematic instruction:   
----------   
==> ${validator.getMessage(action)?js_string} [on line 50, column 26 in template/xhtml/form-close-validate.ftl]   
 in include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" [on line 25, column 1 in template/xhtml/form-close.ftl]   
----------   
  
Java backtrace for programmers:   
----------   
freeer.template.TemplateModelException: Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on com.opensymphony.xwork2.validator.validators.RequiredStringValidator@161c9d1  
    at freeer.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:136)   
    at freeer.core.MethodCall._getAsTemplateModel(MethodCall.java:93)   
    at freeer.core.Expression.getAsTemplateModel(Expression.java:89)   
    at freeer.core.Expression.getStringValue(Expression.java:93)   
    at freeer.core.StringBuiltins$StringBuiltIn._getAsTemplateModel(StringBuiltins.java:71)   
    at freeer.core.Expression.getAsTemplateModel(Expression.java:89)   
    at freeer.core.Expression.getStringValue(Expression.java:93)   
    at freeer.core.DollarVariable.accept(DollarVariable.java:76)   
    at freeer.core.Environment.visit(Environment.java:196)   
    at freeer.core.MixedContent.accept(MixedContent.java:92)   
    at freeer.core.Environment.visit(Environment.java:196)   
    at freeer.core.IteratorBlock$Context.runLoop(IteratorBlock.java:160)   
    at freeer.core.Environment.visit(Environment.java:351)   
    at freeer.core.IteratorBlock.accept(IteratorBlock.java:95)   
    at freeer.core.Environment.visit(Environment.java:196)   
    at freeer.core.IteratorBlock$Context.runLoop(IteratorBlock.java:160)   
    at freeer.core.Environment.visit(Environment.java:351)   
    at freeer.core.IteratorBlock.accept(IteratorBlock.java:95)   
    at freeer.core.Environment.visit(Environment.java:196)   
    at freeer.core.MixedContent.accept(MixedContent.java:92)   
    at freeer.core.Environment.visit(Environment.java:196)   
    at freeer.core.ConditionalBlock.accept(ConditionalBlock.java:79)   
    at freeer.core.Environment.visit(Environment.java:196)   
    at freeer.core.MixedContent.accept(MixedContent.java:92)   
    at freeer.core.Environment.visit(Environment.java:196)   
    at freeer.core.Environment.include(Environment.java:1375)   
    at freeer.core.Include.accept(Include.java:155)   
    at freeer.core.Environment.visit(Environment.java:196)   
    at freeer.core.MixedContent.accept(MixedContent.java:92)   
    at freeer.core.Environment.visit(Environment.java:196)   
    at freeer.core.Environment.process(Environment.java:176)   
    at freeer.template.Template.process(Template.java:232)   
    at org.apache.struts2.components.template.FreeerTemplateEngine.renderTemplate(FreeerTemplateEngine.java:168)   
    at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:530)   
    at org.apache.struts2.components.UIBean.end(UIBean.java:484)   
    at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:43)   
    at org.apache.jsp.index_jsp._jspx_meth_s_005fform_005f0(index_jsp.java:166)   
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:90)   
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)   
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)   
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)   
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)   
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)   
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)   
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)   
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)   
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)   
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)   
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)   
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)   
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:415)   
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)   
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)   
    at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)   
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)   
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)   
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)   
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)   
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)   
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)   
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)   
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)   
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)   
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)   
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)   
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)   
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)   
    at java.lang.Thread.run(Thread.java:619)   
Caused by: java.lang.NullPointerException   
    at com.opensymphony.xwork2.validator.DelegatingValidatorContext$LoggingValidationAware.<init>(DelegatingValidatorContext.java:234)   
    at com.opensymphony.xwork2.validator.DelegatingValidatorContext.makeValidationAware(DelegatingValidatorContext.java:193)   
    at com.opensymphony.xwork2.validator.DelegatingValidatorContext.<init>(DelegatingValidatorContext.java:53)   
    at com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(ValidatorSupport.java:64)   
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)   
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
    at java.lang.reflect.Method.invoke(Method.java:597)   
    at freeer.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:616)   
    at freeer.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:113)   
    ... 67 more
jsp:
<%@ page pageEncoding="utf-8" contentType="text/html; charset=utf-8" %>   
<%@ taglib prefix="s" uri="/struts-tags" %>   
<%@ page isELIgnored="false"%>   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
<html>   
  <head>   
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   
    <title>My JSP 'LoginView.jsp' starting page</title>   
       
    <meta http-equiv="pragma" content="no-cache">   
    <meta http-equiv="cache-control" content="no-cache">   
    <meta http-equiv="expires" content="0">       
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">   
    <meta http-equiv="description" content="This is my page">   
    <!--   
    <link rel="stylesheet" type="text/css" href="styles.css">   
    -->   
  
  </head>   
     
  <body>   
  <s:fielderror></s:fielderror>   
    <s:form name="form" action="LoginAction_login" method="post" validate="true">   
        <s:textfield label="用户名" id="view.username" name="view.username"></s:textfield>   
        <s:password label="密码" id="view.password" name="view.password"></s:password>   
        <s:submit value="登陆"></s:submit>   
    </s:form>   
  </body>   
</html>ssh2结构 
控制台和日志都没报错 
上面的错误,jsp页面上提示的,不知道怎么回事,请帮忙,多谢

解决方案 »

  1.   

    Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on com.opensymphony.xwork2.validator.validators.RequiredStringValidator@161c9d1
    说明验证的时候报错~
      

  2.   

    我打开页面,就直接报错了,没验证啊,啥都没操作呢
    这个页面时index.jsp首页
      

  3.   

    楼主检查下你的验证文件验证的范围和struts.xml中对验证的配置,可能你的验证器的验证没配置好
    耐心找下,信息太少大家不好定位,最好自己好好检查下代码可能出现问题的地方,要不就再去看看
    struts2的验证这块。
      

  4.   

    这是页面右键源码:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>My JSP 'LoginView.jsp' starting page</title>
      </head>
      
      <body>
         <script type="text/javascript" src="/ssh2/struts/xhtml/validation.js"></script>

    <form namespace="" id="LoginAction_login" name="form" onsubmit="return validateForm_LoginAction_login();" action="/ssh2/LoginAction_login.action" method="post"><table class="wwFormTable">
         <tr>
        <td class="tdLabel"><label for="view.username" class="label">用户名:</label></td>
        <td
    ><input type="text" name="view.username" value="" id="view.username"/></td>
    </tr>     <tr>
        <td class="tdLabel"><label for="view.password" class="label">密码:</label></td>
        <td
    ><input type="password" name="view.password" id="view.password"/></td>
    </tr>     <tr>
        <td colspan="2"><div align="right"><input type="submit" id="LoginAction_login_0" value="登陆"/>
    </div></td>
    </tr>    </table></form><script type="text/javascript">
        function validateForm_LoginAction_login() {
            form = document.getElementById("LoginAction_login");
            clearErrorMessages(form);
            clearErrorLabels(form);        var errors = false;
            // field name: view.username
            // validator name: requiredstring
            if (form.elements['view.username']) {
                field = form.elements['view.username'];
                var error = "<!-- FREEMARKER ERROR MESSAGE STARTS HERE --><script language=javascript>//"></script><script language=javascript>//'></script><script language=javascript>//"></script><script language=javascript>//'></script></title></xmp></script></noscript></style></object></head></pre></table></form></table></table></table></a></u></i></b><div align=left style='background-color:#FFFF00; color:#FF0000; display:block; border-top:double; padding:2pt; font-size:medium; font-family:Arial,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; text-transform: none'><b style='font-size:medium'>FreeMarker template error!</b><pre><xmp>Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on com.opensymphony.xwork2.validator.validators.RequiredStringValidator@d2774f
    The problematic instruction:
    ----------
    ==> ${validator.getMessage(action)?js_string} [on line 50, column 26 in template/xhtml/form-close-validate.ftl]
     in include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" [on line 25, column 1 in template/xhtml/form-close.ftl]
    ----------Java backtrace for programmers:
    ----------
    freeer.template.TemplateModelException: Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on com.opensymphony.xwork2.validator.validators.RequiredStringValidator@d2774f
    at freeer.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:136)
    at freeer.core.MethodCall._getAsTemplateModel(MethodCall.java:93)
    at freeer.core.Expression.getAsTemplateModel(Expression.java:89)
    at freeer.core.Expression.getStringValue(Expression.java:93)
    只截取部分错误信息,太长了,不让发
    </xmp></pre></div></html>  </body>
    </html>action和验证文件的名字:
    LoginAction.java
    LoginAction.properties
    LoginAction-validation.xml
    在相同目录下LoginAction-validation.xml代码:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
    <validators>
        <!-- Field-Validator Syntax -->
        <field name="view.username">
            <field-validator type="requiredstring">
             <param name="trim">true</param>
                <message key="login.username.required"/>
            </field-validator>
        </field>
        <field name="view.password">
            <field-validator type="requiredstring">
                <message key="login.password.required"/>
            </field-validator>
        </field>
    </validators>struts.xml:
    <action name="LoginAction_login" class="LoginAction" method="login">
    <interceptor-ref name="defaultStack"></interceptor-ref>
    <interceptor-ref name="validation"></interceptor-ref>
    <result name="input" type="dispatcher">/index.jsp</result>
    <result name="success" type="dispatcher">/admin/main.jsp</result>
    </action>请帮忙,我还是没找出原因
      

  5.   

    找到原因了,验证框架文件里用到了资源文件的key,这样就必须先走一下Action,然后转到jsp页面才行
    我是直接打开http://....../index.jsp,没走Action
      

  6.   

    不是这样的 楼主理解好像是错误的,直接打开jsp也没有关系,改validate的属性为false就行,
    jsp应该这样设置才对 <s:form action="Login" name="LoginForm" validate="false">