Struts + Tiles

Napsland
05 de Enero del 2006
Buen día

Quisiera saber si alguien me puede ayudar, hasta hace poco tenía mi
aplicación web hecha con struts, por ciertos requerimientos me he
visto obligado a incluir alguna forma de poder modificar la
presentación según clientes, etc; he decidido utilizar TILES, y he
estado buscando información sobre como funcionan. He modificado un par
de ellas, para lo cual he definido un BasicLayout, y después hago una
extensión de este layout para cada perfil en el archivo de definionces
tiles-definitions.xml:

<component-definitions>

<definition name="baseDef" path="/Basiclayout.jsp">
<put name="header" value="/header.jsp"/>
<put name="footer" value="/footer.jsp"/>
</definition>

<definition name="PerfilUno" extends="baseDef">
<put name="body" value="/PerfilUno.jsp"/>
</definition>
..........

<definition name="MenuPerfilUno" extends="PerfilUno">
<put name="body" value="/PerfilUno/Menu.jsp"/>
</definition>
...
</component-definitions>

y en el action que es invocado al llamar menu.do, Y así en el
struts-config.xml ,
<action path="/menu" type="action.MenuPerifl">
<forward name="perfiluno" path="/MenuPerfilUno.do"/>

<forward name="perfildos" path="/MenuPerfilDos.do"/>

<forward name="perfiltres" path="/MenuPerfilTres.do"/>
</action>

en el web.xml tengo la configuracion standar con struts(1.2) pero sin
embargo cuando hago la llamada a menu.do, sea cual sea el perfil me
sale un error:
el recurdo MenuPerfilUno no existe.

Entonces mi pregunta es:

Tengo que añadir algo más al struts_config.xml? añadir algo más al
web.xml o la definiicón de las tiles es incorrecta? alguien me podría
ayudar

Saluods
napsland

larteaga
05 de Enero del 2006
Borra el .do al path ya que asi se llama en tu definition tag, ademas si no lo has hecho tienes que anhadir el plug-in para tiles en tu config y definir el taglib en web.xml

napsland
05 de Enero del 2006
Hola larteaga, mi web.xml tiene esta configuracion
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>

<init-param>
<param-name>definitions-config</param-name>
<param-value>/WEB-INF/tileDefinitions.xml</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>validate</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>log4j.properties</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

en el struts config tengo lo del plugin y lo del controller,
pero cuando hago la invoación a
localhost:808/miapp/menu.do --> me tendría k llevar a ejecutar el menu perfil1 es decir
localhost:808/miapp/MenuPerfilUno con lo cual con tiles debería funcionar pero sinembargo me dice:

"El recurso requerido (/miappr/MenuPerfilUno) no está disponible."

me falta algo por configurar tengo que cambiar algo en el web.xml??

gracias por la ayuda
naspland




napsland
05 de Enero del 2006
lo siento se que soy cansino, esto he obtenido del archivo de log del tomcat :


329 [Thread-1] ERROR digester.Digester - Parse Error at line 111 column 81: Element type "controller" must be declared.
org.xml.sax.SAXParseException: Element type "controller" must be declared.
......
360 [Thread-1] ERROR digester.Digester - Parse Error at line 116 column 62: Element type "plug-in" must be declared.
org.xml.sax.SAXParseException: Element type "plug-in" must be declared.
......
375 [Thread-1] ERROR digester.Digester - Parse Error at line 122 column 17: The content of element type "struts-config" must match "(data-sources?,form-beans?,global-forwards?,action-mappings?)".
org.xml.sax.SAXParseException: The content of element type "struts-config" must match "(data-sources?,form-beans?,global-forwards?,action-mappings?)".
......
391 [Thread-1] INFO util.PropertyMessageResources - Initializing, config='ApplicationResources', returnNull=true
657 [Thread-1] INFO tiles.TilesPlugin - Tiles definition factory loaded for module ''.

gracias una vez más
napsland

larteaga
05 de Enero del 2006
Primero empecemos con web.xml , tienes que adicionar esto:
<taglib>
<taglib-uri>/WEB-INF/tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/tiles.tld</taglib-location>
</taglib>

De esta forma tu jsp podra reconocer las directivas:
<%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %>
<tiles:insert XXXXXXX >

larteaga
05 de Enero del 2006
De los errores de Tomcat veo que el problema parece ser que no esta procesando bien las directivas controller y plug-in, debe haber un problema por ahi, de repente no has puesto bien la ruta para que maneje los tiles, checa eso

napsland
05 de Enero del 2006
Hola larteaga

me he estado mirando los mails y tengo un par de pregutnas, yo me bajé la última versión de struts, creo k la 1.2 y en ella viene un archivo struts-tiles.tld, por lo que yo en el web.xml tengo
-----
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>


<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
---

en lugar de loq ue tu me decías, así mismo tengo en el web.xml
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>

debo hacer alguna mención en especial para para lo de las tiles en el servlet???, en el web.xml

Sobre el struts-config.xml, he estado mirando y el error aquel me dice que no acetpa lo del controller y así como lo del plugs-in, puede ser por la versión del dtd y por usar struts1.2??

Gracias por tu ayuda
Napsland

napsland
05 de Enero del 2006
me he fijado en el log de tomcat y me indica:
657 [Thread-1] INFO tiles.TilesPlugin - Tiles definition factory loaded for module ''.

kiere decir que me pilla las tiles pero la definición no sabe de donde pillarla???

napsland
05 de Enero del 2006
Hoola larteaga, muchas gracias por tu ayuda!!1 ya he podido solucinar lo de las tiles, me estaba falanado q yo estaba trabajando con strust 1.2 pero la validación la hacía con el dtd de struts1.0 !!! y lo de las páginas en blanco era k la definición de las tiles estaban apuntando a directorios equivocados.

Muchas gracias una vez más
Napsland

larteaga
05 de Enero del 2006
ok chevere, buena suerte en tus proyectos futuros, solo sacame de una duda como se mezclo el dtd de 1.0 ?