我使用Struts 2(2.3.14.3版本)與SiteMesh的3(3.0-α-2)和我在一起,我得到下cerain情況下一個NullPointerException。的Struts 2 + SiteMesh的3集成 - NPE在FreemarkerDecoratorServlet
首先,這裏是我的web.xml的struts2/SiteMesh的配置:
<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>*.do</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.do</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>*.do</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>sitemesh-freemarker</servlet-name>
<servlet-class>org.apache.struts2.sitemesh.FreemarkerDecoratorServlet</servlet-class>
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
現在,這裏是問題描述:
如果支柱dev.mode啓用,我嘗試訪問不存在的操作,拋出一個struts ConfigurationException。
Struts的調度程序嘗試通過調用org.apache.struts2.dispatcher.Dispatcher.sendError(),寫入標準的Struts錯誤模板(/org/apache/struts2/dispatcher/error.ftl)的處理異常響應。
現在,當事情開始出錯時。
因爲原始請求與SiteMesh的過濾器飾,即使在配置出錯,SiteMesh的嘗試一個裝飾,這會導致一個例外,因爲Struts動作方面沒有設置正確地應用,由於配置異常和我正在以下:
java.lang.NullPointerException
org.apache.struts2.sitemesh.FreemarkerDecoratorServlet.process(FreemarkerDecoratorServlet.java:176)
這裏是FreemarkerDecoratorServlet.java相應的代碼 - CTX變量爲空:
ActionContext ctx = ServletActionContext.getActionContext(request);
model = freemarkerManager.buildTemplateModel(ctx.getValueStack(), ctx.getActionInvocation().getAction(), servletContext, request, response, wrapper);
我認爲的sitemesh不應該加以裝飾的響應如果調用該操作時出現錯誤,但我不知道如何在不修改Struts2/Sitemesh集成的情況下執行此操作。
任何想法如何避免NPE?
感謝, 馬立克
顯示整個'web.xml'文件。 –
它在這裏:http://www.filedropper.com/web_1 –
爲什麼你的'struts-execute'過濾器url-pattern是'/ struts/*'? –