FreeMarker template error! struts不识别--model类构造函数问题

来源:互联网 发布:网络博客导航 编辑:程序博客网 时间:2024/05/21 09:19
当你在使用Struts2框架的时候,在某些情况下会遇到类似如下提示的错误:
   1. FreeMarker template error!  
   2. Expression error is undefined on line 35, column 4 in template/simple/actionerror.ftl.  
   3. The problematic instruction:  
   4. ----------  
   5. ==> ${error} [on line 35, column 2 in template/simple/actionerror.ftl]  
   6. ----------  

FreeMarker template error! Expression error is undefined on line 35, column 4 in template/simple/actionerror.ftl. The problematic instruction: ---------- ==> ${error} [on line 35, column 2 in template/simple/actionerror.ftl] ----------

    此时往往很难判断问题发生在哪里,因为这里的信息提示不明确,这里给大家一个经验:这种问题的引起往往是你在action中使用时传入了null值,这时候机会导致这样的问题发生,所以如果发生这样的情况请检查你的代码,看看是否因为某种问题导致给ftl传入了null值,找到了解决这个问题就可以了。

testStruts/freemarker事例

排查过程

1.仅保留调用action部分,输出传入action内容,确认是否为null                           yes,ftl中form部分未传入action

2.换调用简单成功action,查看传入值是否仍为null                                                no,register正确输出person,确认是后端代码出错

3.比较register和add区别,基本相似

最终确定是调用model类问题,删除其中添加的构造方法,即成功。

构造函数:用户有定义,则编译器不会再自动生成!


补充,网上有说需要显式引入标签库(不必须!),成功后删除设置,仍成功

当在Struts 2应用中使用FreeMarker时,一般我们会希望在以.ftl结尾的文件中使用Struts 2标签,因此这就需要在.ftl结尾的文件中添加对Struts 2标签的引用,代码如下所示:

  1. <#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
复制代码
引用前需要将struts2-core-2.x.x.jar包中的META-INF/struts-tags.tld文件复制到Web应用的WEB-INF下。Struts 2默认是不支持JspTaglibs的引用的,因此我们就需要在web.xml文件中配置一个控制器,使Struts 2支持JspTaglibs的引用。故你需要在web.xml文件中添加如下的代码:
  1. <servlet>
  2.         <servlet-name>JspSupportServlet</servlet-name>
  3.         <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
  4.         <load-on-startup>1</load-on-startup>
  5. </servlet>
复制代码




0 0