各位大侠们好,今天学习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)
请大侠们给点指点吧,谢谢了!

解决方案 »

  1.   

    %>_<% 求大侠们给点指导啊,解决不了我睡不着啊,谢谢了
      

  2.   


    师傅你好,我用的是MyEclips8.5上带的2.1.8版的
      

  3.   

    <s:head />
    已经没有ajax主题了ajax应该被封装在
    struts2-dojo-plugin-x.x.x.jar中。你可以看看。
      

  4.   

    你好,我导入struts2-dojo-plugin-2.1.6.jar后,在index.jsp页面中使用<sx:head />,结果报错如下:
    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.请大侠不吝赐教,谢谢了!!!!