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

Reply via email to