[Struts2] Problema con <s:action> tag

emaborsa

Nuovo Utente
10 Ott 2013
8
0
0
Ho messu su un sistema che utilizza Struts 2.1.6 e Tiles 2.1.2. Il tutto funziona perfettamente, a parte il tag <s:action> inserito in una JSP:

Codice:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form>
<s:action name="myAction">
namespace="/myNameSpace" executeResult="true"
ignoreContextParams="true" var="myVar" />

<s:if test="list != null">
//do something with the list
</s:if>

//othre stuff
Con questa pagina, mi viene lanciata un eccezione:

Codice:
2013-10-0815:43:41,028 ERROR [org.apache.tiles.jsp.taglib.RenderTag][http-bio-8080-exec-3] IO Error executing tag:JSPException including path '/pages/utente/elencoUtenti.jsp'.
org.apache.tiles.util.TilesIOException: JSPException including path '/pages/utente/elencoUtenti.jsp'.
at org.apache.tiles.servlet.context.ServletUtil.wrapServletException(ServletUtil.java:232)
at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:105)
at org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:96)
at org.apache.tiles.renderer.impl.UntypedAttributeRenderer.write(UntypedAttributeRenderer.java:61)
.... Caused by: java.lang.NullPointerException
at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:49)
at org.apache.jsp.pages.utente.elencoUtenti_jsp._jspx_meth_s_005fif_005f0(elencoUtenti_jsp.java:232)
at org.apache.jsp.pages.utente.elencoUtenti_jsp._jspx_meth_s_005fform_005f0(elencoUtenti_jsp.java:172)
at org.apache.jsp.pages.utente.elencoUtenti_jsp._jspService(elencoUtenti_jsp.java:104)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:954)
at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:684)
at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:678)
at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:103)
    ...99 more
Se tolgo <s:action> dalla JSP, la pagina in question (elencoUtenti.jsp) viene caricata a dovere. Se lascio solo <s:action>, pure funziona...da questo escludo un problema in questa JSP.

La "myAction" viene chiatata e terminata correttamente (testato in debug) e ritorna success, il result è anche corretto altrimenti mi darebbe eccezione di importazioni (testato cambiando il nome della jsp da includere), ho provato anche a passargli una JSP vuota, per vedere se è un problema della seconda JSP...invece nulla, deve essere un impostazione di struts e/o tiles.

Qualche idea?
 

Slyfer

Utente Attivo
4 Dic 2010
65
21
0
Ciao, ho un domanda e una richiesta. Domanda: perchè l'action è dentro al form?? Richiesta: ci puoi postare lo struts.xml e la classe java della action.

ciao
 

emaborsa

Nuovo Utente
10 Ott 2013
8
0
0
Ciao, la action è all'interno al form, perchè ritorna una JSP con delle varaibili che servono al form.

Struts:
Codice:
<package name="default-empty" extends="struts-default">
    <result-types>
        <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
    </result-types>
</package>
<package name="utente-include" namespace="/utenteInclude" extends="default-empty">	    
    <action name="formattazionePaginazione" class="com.emaborsa.doctracing.web.action.formattazione.FormattazioneCriteriUtenteAction"
			method="formattazione">
        <result name="success" type="tiles">common.paginazione.def</result>
    </action>
		
    <action name="ricerca" class="com.emaborsa.doctracing.web.action.ricerca.RicercaUtentiAction" method="ricerca">
        <result name="success" type="tiles">include.utente.elenco.def</result>
    </action>		
</package>
Tiles:
Codice:
<definition name="common.paginazione.def" template="/pages/common/paginazione.jsp">
</definition>
Come già scritto, se tolgo o la <s:action> o il resto della pagina, il sistema non da eccezioni.
Ho un altro progetto strutturato in questa maniera, e funziona...unica differenza che NON lavora su TomEE.
 

Slyfer

Utente Attivo
4 Dic 2010
65
21
0
Ciao, non vedo la definizione della myAction e non hai messo il codice java.

Il container penso non c'entri, anche perchè se hai solo struts e tiles, basta un normalissimo tomcat o addirittura jetty

ciao
 

emaborsa

Nuovo Utente
10 Ott 2013
8
0
0
...avevo dimenticato la JSP con i parametri corretti:

Codice:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form>

	<div class="titoloBloccoForm">
		<s:text name="utente.elenco.titolo" />
	</div>
	
	<s:action name="formattazionePaginazione"
			namespace="/utenteInclude" executeResult="true"
			ignoreContextParams="false" var="formattazione" />
		
	<s:if test="lista != null && lista.size() > 0">
		//altro codice
	</s:if>
	<s:else>
	    <div><span class="info"><s:text name="elenco.empty" /></span></div>
	</s:else>

        //altro codice jsp
</s:form>
 
Ultima modifica: