I was never big on the Servlet or Filter models. It seems to me that
Struts2 is moving heavily towards conventions and the more things are
just "pluggable" the easier it will be for users. I feel that the best
approach would be for Struts2 to discover SiteMesh in the class path
and wire it up automatically. I'd also wonder if this could be another
case for some additional annotations in addition to XML configuration
for defining templates.
Anyways, this is how I would proceed and leverage SiteMesh 3. This is
my plan for JCatapult.
-bp
On Oct 23, 2009, at 8:38 AM, Christian Stone wrote:
I have a working Struts 2 application where I am using Velocity AND
Freemarker decorators now intechangeably and SiteMesh is dispatching
them. The full value stacks are available in each, as the same
Configurations are running on both the decorators and the struts
results. You can now have decorators in Freemarker, Velocity, and
JSP as long as the servlets are defined in your web.xml. I had to
make a lot of changes to bring the plugin up to date with the modern
freemarker, so good that this will be getting in early! Note that
the old plugin fix I did is still there, so you can use either of
the two published solutions you wish, and you no longer are using a
crippled Freemarker with the new solution (shown below).
I think my chin dropped when I saw all the decorators mixed in one
decorator.xml and compiling. I am accessing all my statics in my
freemarker decorator (velocity 1.3 does not support such things), so
that is fixed as well. Absolutely sweet! On another note, I was
able to streamline the process a bit, so there should be a subtle
speed improvement as well.
Here is an example web.xml snippet with the new changes hilighted.
Currently I read the configuration from freemarker.properties as
well as velocity.properties, and add any parameters present in the
servlet, so the init phase for the two technologies is a bit more
flexible and dynamic.
<filter>
<filter-name>struts-prepare</filter-name>
<filter-
class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</
filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>net.stonescape.renegade20.presentation</
param-value>
</init-param>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-
class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter>
<filter-name>struts-execute</filter-name>
<filter-
class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</
filter-class>
</filter>
<filter>
<filter-name>timing</filter-name>
<filter-class>net.stonescape.common.filter.TimerFilter</
filter-class>
</filter>
<filter-mapping>
<filter-name>timing</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/*</url-pattern>
</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>
<servlet-mapping>
<servlet-name>sitemesh-freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sitemesh-velocity</servlet-name>
<servlet-
class>org.apache.struts2.sitemesh.VelocityDecoratorServlet</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>
<servlet-mapping>
<servlet-name>sitemesh-velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
-- Christian Stone
On Oct 22, 2009, at 4:00 PM, Musachy Barroso wrote:
that sounds pretty reasonable to me. if you are up for the task, go
for it. 2.2 is far in the horizon and this would be a good time for
this kind of stuff.
musachy
--
_,--"
cws `-._ ________-_______ "----
_----'--'--------------------------------'--'----_
//_| | \ Christian Stone, Software Engineer / | |_\\
(_____|_|__= xt...@stonescape.net =__|_|_____)
_\_____=__ http://xtian.stonescape.net/ ___/_
\/-(o)-~~-(o)-~~-(o)-`------'-(o)-~~-(o)-~~-(o)-\/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
For additional commands, e-mail: dev-h...@struts.apache.org