初学struts2,今天按照书上配置了一个使用validation框架校验的项目,都已经很认真的看着书来配置了,也在网上看了别人的配置方法,也是一样,可是居然出现下面的问题,真是出师不利,头痛死了%>_<%,希望各位大虾能帮帮忙。万分感激!
一共有四个文件(web.xml的就不贴出来了)。
ValidAction.javapackage com.struts2.app;import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ValidAction extends ActionSupport {
// 下面是Action内用于封装用户请求参数的两个属性
private String name;
private String pass;
// name属性对应的getter方法
public String getName() {
return name;
}
// name属性对应的setter方法
public void setName(String name) {
this.name = name;
} // pass属性对应的getter方法
public String getPass() {
return pass;
} // pass属性对应的setter方法
public void setPass(String password) {
this.pass = password;
}
// 处理用户请求的execute方法
public String execute() throws Exception {
// 当用户请求参数的username等于admin,密码请求参数为12345时,返回success字符串
// 否则返回error字符串
if ("admin".equals(getName()) && "12345".equals(getPass())) {
ActionContext.getContext().getSession().put("userinfo", getName());
System.out.println(this.SUCCESS);
return this.SUCCESS;
} else
return this.ERROR;
}
}ValidAction-validation.xml<!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="name">
<field-validator type="requiredstring">
<message>You must enter a name</message>
</field-validator>
</field>
<field name="pass">
<field-validator type="requiredstring">
<param name="min">4</param>
<param name="max">19</param>
<message>password 4 to 19 may take </message>
</field-validator>
</field>
</validators>struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2app" extends="struts-default">
<action name="ValidAction" class="com.struts2.app.ValidAction">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
<result name="input">/validinput.jsp</result>
</action>
</package>
</struts>validinput.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %><html>
<head><title>Action Validation</title></head>
<body>
<s:form action="ValidAction" validate="true">
<s:textfield label="用户名:" name="name"/>
<s:password label="口令:" name="pass"/>
<s:submit/>
</s:form>
</body>
</html>打开validinput.jsp就会出现下面错误了,所以应该不是我的配置问题,不知道是不是tomcat要设置一下才行HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@39be68 - Class: freeer.ext.beans.SimpleMethodModel
File: SimpleMethodModel.java
Method: exec
Line: 130 - freeer/ext/beans/SimpleMethodModel.java:130:-1
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:527)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
root cause Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@39be68 - Class: freeer.ext.beans.SimpleMethodModel
File: SimpleMethodModel.java
Method: exec
Line: 130 - freeer/ext/beans/SimpleMethodModel.java:130:-1
org.apache.struts2.components.UIBean.end(UIBean.java:515)
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
org.apache.jsp.validinput_jsp._jspx_meth_s_005fform_005f0(validinput_jsp.java:133)
org.apache.jsp.validinput_jsp._jspService(validinput_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
root cause freeer.template.TemplateModelException: Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@39be68
freeer.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)
freeer.core.MethodCall._getAsTemplateModel(MethodCall.java:93)
freeer.core.Expression.getAsTemplateModel(Expression.java:89)
freeer.core.IteratorBlock.accept(IteratorBlock.java:94)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167)
freeer.core.Environment.visit(Environment.java:416)
freeer.core.IteratorBlock.accept(IteratorBlock.java:102)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.MixedContent.accept(MixedContent.java:92)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.ConditionalBlock.accept(ConditionalBlock.java:79)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.MixedContent.accept(MixedContent.java:92)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.Environment.include(Environment.java:1482)
freeer.core.Include.accept(Include.java:169)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.MixedContent.accept(MixedContent.java:92)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.Environment.process(Environment.java:189)
freeer.template.Template.process(Template.java:237)
org.apache.struts2.components.template.FreeerTemplateEngine.renderTemplate(FreeerTemplateEngine.java:182)
org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:559)
org.apache.struts2.components.UIBean.end(UIBean.java:513)
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
org.apache.jsp.validinput_jsp._jspx_meth_s_005fform_005f0(validinput_jsp.java:133)
org.apache.jsp.validinput_jsp._jspService(validinput_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
一共有四个文件(web.xml的就不贴出来了)。
ValidAction.javapackage com.struts2.app;import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ValidAction extends ActionSupport {
// 下面是Action内用于封装用户请求参数的两个属性
private String name;
private String pass;
// name属性对应的getter方法
public String getName() {
return name;
}
// name属性对应的setter方法
public void setName(String name) {
this.name = name;
} // pass属性对应的getter方法
public String getPass() {
return pass;
} // pass属性对应的setter方法
public void setPass(String password) {
this.pass = password;
}
// 处理用户请求的execute方法
public String execute() throws Exception {
// 当用户请求参数的username等于admin,密码请求参数为12345时,返回success字符串
// 否则返回error字符串
if ("admin".equals(getName()) && "12345".equals(getPass())) {
ActionContext.getContext().getSession().put("userinfo", getName());
System.out.println(this.SUCCESS);
return this.SUCCESS;
} else
return this.ERROR;
}
}ValidAction-validation.xml<!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="name">
<field-validator type="requiredstring">
<message>You must enter a name</message>
</field-validator>
</field>
<field name="pass">
<field-validator type="requiredstring">
<param name="min">4</param>
<param name="max">19</param>
<message>password 4 to 19 may take </message>
</field-validator>
</field>
</validators>struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2app" extends="struts-default">
<action name="ValidAction" class="com.struts2.app.ValidAction">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
<result name="input">/validinput.jsp</result>
</action>
</package>
</struts>validinput.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %><html>
<head><title>Action Validation</title></head>
<body>
<s:form action="ValidAction" validate="true">
<s:textfield label="用户名:" name="name"/>
<s:password label="口令:" name="pass"/>
<s:submit/>
</s:form>
</body>
</html>打开validinput.jsp就会出现下面错误了,所以应该不是我的配置问题,不知道是不是tomcat要设置一下才行HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@39be68 - Class: freeer.ext.beans.SimpleMethodModel
File: SimpleMethodModel.java
Method: exec
Line: 130 - freeer/ext/beans/SimpleMethodModel.java:130:-1
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:527)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
root cause Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@39be68 - Class: freeer.ext.beans.SimpleMethodModel
File: SimpleMethodModel.java
Method: exec
Line: 130 - freeer/ext/beans/SimpleMethodModel.java:130:-1
org.apache.struts2.components.UIBean.end(UIBean.java:515)
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
org.apache.jsp.validinput_jsp._jspx_meth_s_005fform_005f0(validinput_jsp.java:133)
org.apache.jsp.validinput_jsp._jspService(validinput_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
root cause freeer.template.TemplateModelException: Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@39be68
freeer.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)
freeer.core.MethodCall._getAsTemplateModel(MethodCall.java:93)
freeer.core.Expression.getAsTemplateModel(Expression.java:89)
freeer.core.IteratorBlock.accept(IteratorBlock.java:94)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167)
freeer.core.Environment.visit(Environment.java:416)
freeer.core.IteratorBlock.accept(IteratorBlock.java:102)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.MixedContent.accept(MixedContent.java:92)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.ConditionalBlock.accept(ConditionalBlock.java:79)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.MixedContent.accept(MixedContent.java:92)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.Environment.include(Environment.java:1482)
freeer.core.Include.accept(Include.java:169)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.MixedContent.accept(MixedContent.java:92)
freeer.core.Environment.visit(Environment.java:209)
freeer.core.Environment.process(Environment.java:189)
freeer.template.Template.process(Template.java:237)
org.apache.struts2.components.template.FreeerTemplateEngine.renderTemplate(FreeerTemplateEngine.java:182)
org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:559)
org.apache.struts2.components.UIBean.end(UIBean.java:513)
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
org.apache.jsp.validinput_jsp._jspx_meth_s_005fform_005f0(validinput_jsp.java:133)
org.apache.jsp.validinput_jsp._jspService(validinput_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
<s:form action="ValidAction" validate="true">
=》<s:form action="Valid.action" validate="true">
<param name="min">4</param>
<param name="max">19</param>
<message>password 4 to 19 may take </message>
</field-validator>requiredstring校验器,不支持min和max参数。
<action name="*">
<result>{1}.jsp</result>
<action>
通过action来访问实现客户端校验的页面,不直接访问就OK了。