各位大侠们好,今天学习struts2 Ajax校验时,遇到一个问题,查了半天资料也没搞定,很是抓狂,希望各位大侠能帮帮菜鸟我,谢谢了,俺这厢有礼了!!!!!!我在web.xml中的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr</servlet-name>
<!-- 指定Servlet的实现类 -->
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<!-- 指定处于开发阶段 -->
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<!-- 指定DWR的核心Servlet拦截的URL -->
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>我在dwr.xml中的配置如下:<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<!-- 定义所有需要被暴露的Java方法 -->
<allow>
<!-- 定义将org.apache.struts2.validators.DWRValidator创建成一个validator对象 -->
<create creator="new" javascript="validator">
<param name="class" value="org.apache.struts2.validators.DWRValidator"/>
</create>
<!-- 定义一个转换器 -->
<convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
</allow>
<signatures>
<![CDATA[
import java.util.Map;
import org.apache.struts2.validators.DWRValidator;
DWRValidator.doPost(String, String, Map<String, String>);
]]>
</signatures>
</dwr>
顺便问一下:org.apache.struts2.validators.DWRValidator在哪个包里?我怎么找不到(我做了小测试,就是用在一个普通的Java文件中,使用import也找不到这个DWRValidator类),我已经引入dwr.jar了啊?我在struts.xml文件中配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="sf" extends="struts-default" >
<action name="registe" class="com.wang.action.RegisteAction" >
<result name="success">success.jsp</result>
<result name="input">index.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>
</struts>
我的index.jsp页面如下:<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>请输入您的注册信息</title>
<!-- 导入Ajax主题的controlheader.ftl -->
<s:head theme="ajax"/></head>
<body>
<H1>请输入您的注册信息</H1>
<!-- 设置表单使用Ajax主题,并且设置validate="true" -->
<s:form action="registe" theme="ajax" validate="true">
<s:textfield name="username" label="作者名"/><br>
<s:textfield name="password" label="密码"/>
<s:textfield name="age" label="年龄"/>
<s:textfield name="birth" label="生日"/>
<s:submit value="注册"/>
</s:form>
</body>
</html>
我导入的jar(dwr.jar)文件图如下:然后我配置好RegisteAction-validation.xml后
当输入:http://localhost:8080/struts2Ajax/index.jsp时,就会出现一下错误:
exception org.apache.jasper.JasperException: Expression parameters.parseContent is undefined on line 45, column 28 in template/ajax/head.ftl. - Class: freeer.core.TemplateObject
File: TemplateObject.java
Method: assertNonNull
Line: 124 - freeer/core/TemplateObject.java:124:-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 Expression parameters.parseContent is undefined on line 45, column 28 in template/ajax/head.ftl. - Class: freeer.core.TemplateObject
File: TemplateObject.java
Method: assertNonNull
Line: 124 - freeer/core/TemplateObject.java:124:-1
org.apache.struts2.components.UIBean.end(UIBean.java:515)
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
org.apache.jsp.index_jsp._jspx_meth_s_005fhead_005f0(index_jsp.java:119)
org.apache.jsp.index_jsp._jspService(index_jsp.java:82)
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.core.InvalidReferenceException: Expression parameters.parseContent is undefined on line 45, column 28 in template/ajax/head.ftl.
freeer.core.TemplateObject.assertNonNull(TemplateObject.java:124)
freeer.core.TemplateObject.invalidTypeException(TemplateObject.java:134)
freeer.core.BuiltIn$stringBI._getAsTemplateModel(BuiltIn.java:362)
freeer.core.Expression.getAsTemplateModel(Expression.java:89)
freeer.core.Expression.getStringValue(Expression.java:93)
freeer.core.DollarVariable.accept(DollarVariable.java:76)
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.index_jsp._jspx_meth_s_005fhead_005f0(index_jsp.java:119)
org.apache.jsp.index_jsp._jspService(index_jsp.java:82)
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)请大侠们给点指点吧,谢谢了!
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dwr</servlet-name>
<!-- 指定Servlet的实现类 -->
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<!-- 指定处于开发阶段 -->
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<!-- 指定DWR的核心Servlet拦截的URL -->
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>我在dwr.xml中的配置如下:<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<!-- 定义所有需要被暴露的Java方法 -->
<allow>
<!-- 定义将org.apache.struts2.validators.DWRValidator创建成一个validator对象 -->
<create creator="new" javascript="validator">
<param name="class" value="org.apache.struts2.validators.DWRValidator"/>
</create>
<!-- 定义一个转换器 -->
<convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
</allow>
<signatures>
<![CDATA[
import java.util.Map;
import org.apache.struts2.validators.DWRValidator;
DWRValidator.doPost(String, String, Map<String, String>);
]]>
</signatures>
</dwr>
顺便问一下:org.apache.struts2.validators.DWRValidator在哪个包里?我怎么找不到(我做了小测试,就是用在一个普通的Java文件中,使用import也找不到这个DWRValidator类),我已经引入dwr.jar了啊?我在struts.xml文件中配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="sf" extends="struts-default" >
<action name="registe" class="com.wang.action.RegisteAction" >
<result name="success">success.jsp</result>
<result name="input">index.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>
</struts>
我的index.jsp页面如下:<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>请输入您的注册信息</title>
<!-- 导入Ajax主题的controlheader.ftl -->
<s:head theme="ajax"/></head>
<body>
<H1>请输入您的注册信息</H1>
<!-- 设置表单使用Ajax主题,并且设置validate="true" -->
<s:form action="registe" theme="ajax" validate="true">
<s:textfield name="username" label="作者名"/><br>
<s:textfield name="password" label="密码"/>
<s:textfield name="age" label="年龄"/>
<s:textfield name="birth" label="生日"/>
<s:submit value="注册"/>
</s:form>
</body>
</html>
我导入的jar(dwr.jar)文件图如下:然后我配置好RegisteAction-validation.xml后
当输入:http://localhost:8080/struts2Ajax/index.jsp时,就会出现一下错误:
exception org.apache.jasper.JasperException: Expression parameters.parseContent is undefined on line 45, column 28 in template/ajax/head.ftl. - Class: freeer.core.TemplateObject
File: TemplateObject.java
Method: assertNonNull
Line: 124 - freeer/core/TemplateObject.java:124:-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 Expression parameters.parseContent is undefined on line 45, column 28 in template/ajax/head.ftl. - Class: freeer.core.TemplateObject
File: TemplateObject.java
Method: assertNonNull
Line: 124 - freeer/core/TemplateObject.java:124:-1
org.apache.struts2.components.UIBean.end(UIBean.java:515)
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
org.apache.jsp.index_jsp._jspx_meth_s_005fhead_005f0(index_jsp.java:119)
org.apache.jsp.index_jsp._jspService(index_jsp.java:82)
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.core.InvalidReferenceException: Expression parameters.parseContent is undefined on line 45, column 28 in template/ajax/head.ftl.
freeer.core.TemplateObject.assertNonNull(TemplateObject.java:124)
freeer.core.TemplateObject.invalidTypeException(TemplateObject.java:134)
freeer.core.BuiltIn$stringBI._getAsTemplateModel(BuiltIn.java:362)
freeer.core.Expression.getAsTemplateModel(Expression.java:89)
freeer.core.Expression.getStringValue(Expression.java:93)
freeer.core.DollarVariable.accept(DollarVariable.java:76)
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.index_jsp._jspx_meth_s_005fhead_005f0(index_jsp.java:119)
org.apache.jsp.index_jsp._jspService(index_jsp.java:82)
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)请大侠们给点指点吧,谢谢了!
师傅你好,我用的是MyEclips8.5上带的2.1.8版的
已经没有ajax主题了ajax应该被封装在
struts2-dojo-plugin-x.x.x.jar中。你可以看看。
exception org.apache.jasper.JasperException: Template /template/ajax/text.ftl not found. - Class: freeer.template.Configuration
File: Configuration.java
Method: getTemplate
Line: 489 - freeer/template/Configuration.java:489:-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 Template /template/ajax/text.ftl not found. - Class: freeer.template.Configuration
File: Configuration.java
Method: getTemplate
Line: 489 - freeer/template/Configuration.java:489:-1
org.apache.struts2.components.UIBean.end(UIBean.java:515)
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
org.apache.jsp.index_jsp._jspx_meth_s_005ftextfield_005f0(index_jsp.java:197)
org.apache.jsp.index_jsp._jspx_meth_s_005fform_005f0(index_jsp.java:149)
org.apache.jsp.index_jsp._jspService(index_jsp.java:90)
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 java.io.FileNotFoundException: Template /template/ajax/text.ftl not found.
freeer.template.Configuration.getTemplate(Configuration.java:489)
freeer.template.Configuration.getTemplate(Configuration.java:452)
org.apache.struts2.components.template.FreeerTemplateEngine.renderTemplate(FreeerTemplateEngine.java:120)
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.index_jsp._jspx_meth_s_005ftextfield_005f0(index_jsp.java:197)
org.apache.jsp.index_jsp._jspx_meth_s_005fform_005f0(index_jsp.java:149)
org.apache.jsp.index_jsp._jspService(index_jsp.java:90)
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)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.请大侠不吝赐教,谢谢了!!!!