Struts2 freemarker.template.TemplateModelException

今天抽出点时间复习了一下,李刚<<struts2权威指南>>,其中有一章,关于客户端验证的,按照书上步骤,最后报了一个freemarker.template.TemplateModelException: Method public java.util.List错误,

问题:在使用struts做客户端校验时,form中增加validate="true"属性,login.jsp代码如下:

<s:form action="userAddAction" method="post" validate="true">

<s:textfield name="username" key="username"></s:textfield>

<s:textfield name="firstname" key="firstname"></s:textfield>

<s:submit key="login"></s:submit>

</s:form>

截取部分错误代码

------------------------------------------------------

异常代码:

2011-8-9 17:14:33 freemarker.log.JDK14LoggerFactory$JDK14Logger error

严重:

Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on [email protected]

The problematic instruction:

----------

==> list tag.getValidators("${tagName}") as validator [on line 46, column 9 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.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on [email protected]

at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)

………


------------------------------------------------------

本着内事不决问度娘,外事不决问谷歌的态度,发现有人说了

解决办法1:

去掉表单中的validate="true"属性,即取消了Struts2框架的客户端验证,改用它的服务端验证。这不是解决问题的办法,呵呵!

解决办法2:给action补充后缀.action即可解决这个问题,修改后的login.jsp代码如下:

<s:form action="userAddAction.action" method="post" validate="true">

<s:textfield name="username" key="username"></s:textfield>

<s:textfield name="firstname" key="firstname"></s:textfield>

<s:submit key="login"></s:submit>

</s:form>

但是方法2会报另一个错误

2015-3-10 11:48:29 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn

警告: No configuration found for the specified action: ‘userAddAction.action‘ in namespace: ‘/login‘. Form action defaulting to ‘action‘ attribute‘s literal value.

2015-3-10 11:48:29 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn

警告: No configuration found for the specified action: ‘userAddAction.action‘ in namespace: ‘/login‘. Form action defaulting to ‘action‘ attribute‘s literal value.

解决办法3:在struts.xml中填加一个

<action name="loginInit" class="com.tungkong.action.RegistAction">

<result name="input">/login.jsp</result>

<result name="success">/success.jsp</result>

</action>

login.jsp代码如下:

<s:form action="userAddAction" method="post" validate="true">

<s:textfield name="username" key="username"></s:textfield>

<s:textfield name="firstname" key="firstname"></s:textfield>

<s:submit key="login"></s:submit>

</s:form>

访问的时候写:http://localhost:8080/test/loginInit,这样就不会报错了,如果有更好的解决方式,欢迎大家讨论!

时间: 2024-10-08 16:08:50

Struts2 freemarker.template.TemplateModelException的相关文章

freemarker.template.TemplateModelException: Don&#39;t know how to present an object of this type to a te

我在页面编写测试list标签代码一直通过不了,总是报freemarker.template.TemplateModelException: Don't know how to present an object of this type to a template: com.evan.Person. 解决办法是:将freemarker的2.2.8jar替换成2.3.16或2.3.21(目前最新)版本. 项目的运行源码下载地址:http://download.csdn.net/download/z

Could not load the FreeMarker template named &amp;#39;select&amp;#39;

眼下项目使用struts2, 所以页面中就使用到了struts2的标签,可是今天在做新的功能的时候突然出现 "Could not load the FreeMarker template named 'select'" 这种错误. 看错误信息是找不到struts2  的select 标签,可是其它页面也都用到了select.也没有出现错误.最后发现问题出在了action中.我在action中定义了一个实体变量,起名为theme, 最后将该变量名称改掉就好了. 因为时间关系没有找到根本原

Could not load the FreeMarker template named &#39;select&#39;

目前项目使用struts2, 所以页面中就使用到了struts2的标签,但是今天在做新的功能的时候突然出现 "Could not load the FreeMarker template named 'select'" 这样的错误, 看错误信息是找不到struts2  的select 标签,但是其他页面也都用到了select,也没有出现错误.最后发现问题出在了action中,我在action中定义了一个实体变量,起名为theme, 最后将该变量名称改掉就好了. 由于时间关系没有找到根本

Spring mvc 中使用ftl引用共通文件出错 FreeMarker template error: Error reading included file &quot;/WEB-INF/ftl/common/errormessage.ftl&quot;

初次接触spring mvc,想做一个小的练习项目,结果在ftl文件中引用其它的共通ftl文件时出错. 目录结构如图所示,想在login.ftl中引用common下的errormessage.ftl <#include '/WEB-INF/ftl/common/errormessage.ftl' /> 结果画面报错: FreeMarker template error: Error reading included file "/WEB-INF/ftl/common/errormes

Struts2 freemarker 配置

Struts2 freemarker 配置 Struts2使用FreeMarker作为其黙认的模板技术,因此Strus2对FreeMarker的支持非常良好.在Struts2应用中使用FreeMarker模板技术,只需要在web.xml和Struts.xml文件中进行简单配置就可以使用了.  一.   须知:  1.下载freemarker.jar的架包 官网下载地址:http://freemarker.org/ 2.把freemarker.jar放进\WEB-INF\lib文件下面 3.配置w

FreeMarker template error

今天在整合SSH的时候出现 FreeMarker template error 错误,看了好长时间也没有检查出来哪里的错误,最后还是在网上查了下这种的错误有很多,但大多数都是因为空值的原因才会出现这种错误,不过一般的空值是会直接提示java.lang.NullPointerException 但是如果使用的是struts的S标签进行遍历空值的话,会直接提示FreeMarker template error,不过在异常中也会提示到相关的信息,由于我是第一次遇到也是太懂,在最后终于看明白了,下面的图

string evaluated instead to freemarker.template.SimpleScalar

[2015-09-06 09:07:32.879] ERROR [6B68DD09CE6FECFE20936CA3C6D560AD:http-bio-8087-exec-8] o.a.s.v.freemarker.FreemarkerResult - Error processing Freemarker result! freemarker.template.TemplateException: Expected method. (element.seniorsystemcode!false)

freemarker.template.TemplateException:Error parsing including template

1.错误描述 freemarker.template.TemplateException:Error parsing including template ftl/main.ftl:on line 643,column84 2.错误原因 在注释中,组件的开始标签和结束标签不一致 <@p.mainSelect label="" id ></@p.select> 3.解决办法 修改开始和结束标签,保证开始和结束标签一致

freemarker.template.TemplateException:Macro has no such argument:params

1.错误描述 freemarker.template.TemplateException:Macro mainSelect has no such argument:params 2.错误原因 在宏定义中,没有params这个参数,但是在运用时却有params参数 3.解决办法 在宏定义加个params参数