Hi all:
I'm using Struts 2 validation and I'm getting a
NullPointerException when the page is being displayed (before it
is even being submitted or validated). I did some searches and
found this Jira: https://issues.apache.org/struts/browse/WW-2150.
It states that it has been fixed in version 2.1.3. I've updated
to the latest SNAPSHOT of 2.1.3 and I'm still getting the error.
The problem seems to be with the <message key...> validation. If
I change it to <message> it works.
Can someone confirm there is not a problem with my setup?
Thanks in advance,
Mark
My directory structure is as following:
com.myapp.struts
|
- LoginAction.java
- LoginAction-validation.xml
- package.properties
LoginAction-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="userName">
<field-validator type="requiredstring">
<message key="requiredString">Boo</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>Please enter a Password</message>
</field-validator>
</field>
</validators>
package.properties
================
<other lines have been snipped>
requiredString=${getText(fieldName)} is required.
login.jsp
================
<other lines have been snipped>
<div id="login">
<h2 align="center">Welcome! </h2>
<center>
<!--<s:actionerror />-->
<s:if test="hasActionErrors()">
<span class="errorMessage">
<s:iterator value="actionErrors">
<s:property escape="false"/>
</s:iterator>
</span>
</s:if>
<s:form action="login" method="POST" validate="true">
<s:textfield label="Name" name="userName"
maxlength="8" size="8px" required="true"/>
<s:password label="Password" name="password"
maxlength="8" size="8px" required="true"/>
<s:submit align="center" value="Login"/>
</s:form></center>
<!-- end #mainContent -->
</div>
struts.xml
==================
<struts>
<include file="struts-default.xml" />
<package name="Hotel" extends="struts-default">
<interceptors>
<interceptor name="mySecurity"
class="com.myapp.struts.SecurityInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="mySecurity">
<param name="requiredRoles">user</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/>
<global-results>
<result name="noaccess">/noaccess.jsp</result>
</global-results>
<action name="login" class="com.myapp.struts.LoginAction">
<result name="input">login.jsp</result>
<result>WEB-INF/mainmenu.jsp</result>
</action>
<other lines snipped>
Stack Trace:
==================
008-09-09 11:05:07,521 ERROR
[org.apache.struts2.components.UIBean] - <error when rendering>
Method public java.lang.String
com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMess
age(java.lang.Object) threw an exception when invoked on
com.opensymphony.xwork2.validator.validators.RequiredStringValidator@
3b1101
The problematic instruction:
----------
==> ${validator.getMessage(action)?js_string} [on line 51, 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:
----------
freemarker.template.TemplateModelException: Method public
java.lang.String
com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMess
age(java.lang.Object) threw an exception when invoked on
com.opensymphony.xwork2.validator.validators.RequiredStringValidator@
3b1101
at freemarker.ext.beans.SimpleMethodModel.exec
(SimpleMethodModel.java:130)
at freemarker.core.MethodCall._getAsTemplateModel
(MethodCall.java:93)
at freemarker.core.Expression.getAsTemplateModel
(Expression.java:89)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.StringBuiltins
$StringBuiltIn._getAsTemplateModel(StringBuiltins.java:71)
at freemarker.core.Expression.getAsTemplateModel
(Expression.java:89)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.IteratorBlock$Context.runLoop
(IteratorBlock.java:167)
at freemarker.core.Environment.visit(Environment.java:415)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.IteratorBlock$Context.runLoop
(IteratorBlock.java:167)
at freemarker.core.Environment.visit(Environment.java:415)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.ConditionalBlock.accept
(ConditionalBlock.java:79)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.Environment.include(Environment.java:1477)
at freemarker.core.Include.accept(Include.java:169)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.Environment.process(Environment.java:188)
at freemarker.template.Template.process(Template.java:237)
at
org.apache.struts2.components.template.FreemarkerTemplateEngine.rende
rTemplate(FreemarkerTemplateEngine.java:185)
at org.apache.struts2.components.UIBean.mergeTemplate
(UIBean.java:558)
at org.apache.struts2.components.UIBean.end(UIBean.java:512)
at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag
(ComponentTagSupport.java:42)
at org.apache.jsp.login_jsp._jspx_meth_s_005fform_005f0
(login_jsp.java:344)
at org.apache.jsp.login_jsp._jspService(login_jsp.java:139)
at org.apache.jasper.runtime.HttpJspBase.service
(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service
(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile
(JspServlet.java:337)
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.ApplicationDispatcher.invoke
(ApplicationDispatcher.java:630)
at
org.apache.catalina.core.ApplicationDispatcher.processRequest
(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward
(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward
(ApplicationDispatcher.java:302)
at org.apache.jasper.runtime.PageContextImpl.doForward
(PageContextImpl.java:694)
at org.apache.jasper.runtime.PageContextImpl.forward
(PageContextImpl.java:665)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:54)
at org.apache.jasper.runtime.HttpJspBase.service
(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service
(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile
(JspServlet.java:337)
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.struts2.dispatcher.FilterDispatcher.doFilter
(FilterDispatcher.java:389)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:235)
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:286)
at org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run
(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:613)
Caused by: java.lang.NullPointerException
at com.opensymphony.xwork2.validator.DelegatingValidatorContext
$LoggingValidationAware.<init>(DelegatingValidatorContext.java:236)
at
com.opensymphony.xwork2.validator.DelegatingValidatorContext.makeVali
dationAware(DelegatingValidatorContext.java:195)
at
com.opensymphony.xwork2.validator.DelegatingValidatorContext.<init>
(DelegatingValidatorContext.java:46)
at
com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMess
age(ValidatorSupport.java:73)
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:585)
at freemarker.ext.beans.BeansWrapper.invokeMethod
(BeansWrapper.java:835)
at freemarker.ext.beans.SimpleMethodModel.exec
(SimpleMethodModel.java:106)
... 73 more
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]