Sitemesh com Struts2 - Tags s:form não funcionam no decorator

5 respostas
P

Ola pessoal,

estou desenvolvendo um aplicativo, e dentro do arquivo decorator eu tenho um formulario de consulta, o problema é que quando eu coloco a tag s:form dentro do arquivo de template(decorator) o sitemesh para de funcionar.

dando o seguinte erro:

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /decorators/site.jsp at line 119

116:                             
117:                             <!-- Formulario de buscas -->
118:                               
119:                               <s:form  method="POST" theme="simple" cssClass="space" >
120:                             
121:                               <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
122:                                 <tr>

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)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
	com.opensymphony.module.sitemesh.filter.PageFilter.writeDecorator(PageFilter.java:173)
	com.opensymphony.module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java:158)
	com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

java.lang.NullPointerException
	org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:50)
	org.apache.jsp.decorators.site_jsp._jspx_meth_s_005fform_005f0(site_jsp.java:442)
	org.apache.jsp.decorators.site_jsp._jspService(site_jsp.java:178)
	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)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
	com.opensymphony.module.sitemesh.filter.PageFilter.writeDecorator(PageFilter.java:173)
	com.opensymphony.module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java:158)
	com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

Se eu tiro a tag s:form do decorator o sitemesh volta a funcionar.

tem que fazer alguma configuração a mais pra funcionar? eu procurei pra caramba na net e nao achei nada a respeito.

vlw

5 Respostas

G

Nunca usei tags do Struts 2 dentro de um decorator do Sitemesh. Já deu uma olhada no fórum do Sitemesh ? sempre tem algumas dicas interessantes por lá.

P

ja olhei sim…

mas nao encontrei nada falando sobre isso la :confused: será q se eu fizer um include e no include eu fizer as tags do struts funciona? Sei la to sem saber como fazer isso :s

G

Coloca teu Decorator aqui pra eu dar uma olhada.

P

Consegui resolver,

pra poder funcionar, tem que colocar essa tag antes do filtro do site mash no web.xml

<filter>
        <filter-name>struts-cleanup</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts-cleanup</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Não mi pergunte o por q… foi depois de muito teste e sofrimento, funcionou dessa forma.

Valew :grin:

G

Então Paulo… isso acontece porque o FilterDispatcher limpa a ActionContext e seu decorator não consegue ter acesso aos dados que você precisa. Por isso ocorre NPE quando você tenta usar alguma tag no Decorator.

Ao aidicionar a ActionContextCleanUp o FilterDispatcher não realizará a limpeza da ActionContext e você conseguirá usar as tags normalmente. Lembrando que essa Filter desse mapeado no arquivo web.xml antes do mapeamento do FilterDispatcher.

Criado 24 de abril de 2008
Ultima resposta 25 de abr. de 2008
Respostas 5
Participantes 2