1.出现空引用
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:435)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:40)
root cause
java.lang.NullPointerException
org.apache.struts.taglib.tiles.InsertTag.processName(InsertTag.java:527)
org.apache.struts.taglib.tiles.InsertTag.createTagHandler(InsertTag.java:482)
org.apache.struts.taglib.tiles.InsertTag.doStartTag(InsertTag.java:438)
org.apache.jsp.index_jsp._jspx_meth_tiles_005finsert_005f0(index_jsp.java:119)
org.apache.jsp.index_jsp._jspService(index_jsp.java:86)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:40)
其问题主要由于使用不当造成的!!!
通常Struts配置文件为
<plug-in classname="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-def.xml">
<set-property property="moduleAware" value="true">
</set-property>
</plug-in>
则相应的tiles-def.xml定义为
<tiles-definitions>
<definition name="main.Layout" path="/layout.jsp">
<put name="header" type="page" value="/header.jsp">
</put>
</definition>
</tiles-definitions></set-property>
重点来了,其中path给出的layout.jsp为模板文件,而不是你直接访问的页面,其内容如下:
<html>
<head>
<title>My JSP 'layout.jsp' starting page</title>
</head>
<body>
<tiles:insert attribute="header"/>
</body>
</html>
因此,需要在实际被用户访问的页面里使用
<tiles:insert definition="main.Layout" />
才不会出错;而不是直接访问模板文件。切记!!!
2. 另外请注意Tiles插件的类名是TilesPlugin而不是TilesPlugIn,与Validator不同。