2013-06-23 15 views
5

Sitemesh 3 (sürüm 3.0-alfa-2) ile birlikte Struts 2 (sürüm 2.3.14.3) kullanıyorum ve cerain koşulları altında bir NullPointerException alıyorum. Burada, ŞimdiStruts 2 + Sitemesh 3 tümleştirmesi - NPE in FreemarkerDecoratorServlet

<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> 

konu açıklaması:

Öncelikle burada web.xml''deki benim Struts2/sitemesh yapılandırma dikmeler dev.mode etkindir

Eğer ben bir erişmeyi deneyin var olmayan eylem, ConfigurationException bir struts atılır.

Struts memuru standart Struts hata şablonunu (/org/apache/struts2/dispatcher/error.ftl) yazıyor org.apache.struts2.dispatcher.Dispatcher.sendError(), çağırarak istisna yerine getirmeye çalışır tepki.

Artık işler yanlış gitmeye başladığında ortaya çıkıyor. Özgün istek, site hatası filtresiyle dekore edildiğinden, yapılandırma hatası oluştuktan sonra bile, sitemesh, bir istisnayla sonuçlanan bir dekoratör uygulamayı dener; çünkü Struts eylem içeriği, yapılandırma istisnası nedeniyle düzgün şekilde ayarlanmadığından ve alıyorum şu: Burada

java.lang.NullPointerException 
org.apache.struts2.sitemesh.FreemarkerDecoratorServlet.process(FreemarkerDecoratorServlet.java:176) 

FreemarkerDecoratorServlet.java uygun koddur - ctx değişken null:
ActionContext ctx = ServletActionContext.getActionContext(request); 
model = freemarkerManager.buildTemplateModel(ctx.getValueStack(), ctx.getActionInvocation().getAction(), servletContext, request, response, wrapper); 

ben sitemesh içinde tepkisini süslemek için denemek gerektiğini düşünüyorum eylemi çağırırken bir hata oluştu, ancak Struts2/Sitemesh entegrasyonunu değiştirmeden bunu nasıl yapacağımı bilmiyorum.

NPE'den nasıl sakınılırsınız?

sayesinde

+1

Tüm 'web.xml' dosyasını göster. –

+0

burada: http://www.filedropper.com/web_1 –

+0

Neden "struts-execute" filtre url-pattern'iniz?/Struts/* '? –

cevap

1

bir geçici çözüm sonuna Struts.xml dosyanın bu pasajı koyarak olabilir Marek: Her bildirilmemiş, istenen eylemi durdurmak ve onları yönlendirmek gerektiğini

<action name="pageNotFound"> 
    <result>404.jsp</result> 
</action> 

<action name="*"> 
    <result type="redirectAction"> 
     <param name="actionName">pageNotFound</param> 
    </result> 
</action> 

JSP ile mevcut bir Eylem.

Sadece bir deneyin ...;)

+0

Downvoter açıklamak ister misiniz? –