I actually missed Tom's email so thanks for reposting :)  There are three
main differences between my version and his ... 

my version supports nested tiles
my version supports tile-controllers 
my version doesn't require a velocity-macro  

Tiles are _very_ simple to use and I have already prepared a little demo-app
you can use to get up to speed :)  It features the TilesTool used with
Velocity and Struts, and also an example of how to use a tile-controller.
Do you want it sent to [EMAIL PROTECTED]

Regarding module support I'll start looking at StrutsUtils :)

Cheers,
Marino


-----Original Message-----
From: Nathan Bubna [mailto:[EMAIL PROTECTED] 
Sent: 23. j�l� 2003 05:08
To: Velocity Developers List
Subject: Re: Struts 1.1 support

Marin� A. J�nsson said:
...
> I miss seeing a listing for Tiles and Modules in the Status doc though.
As
> I've already stated I have a� working TilesTool to contribute (although it
> lacks support for put-lists).  I could also use struts modules in my
> projects ... so maybe I can lend a hand with that?

yeah, i would love it if you'd lend a hand!  i haven't used either Tiles or
Modules, and really don't know a lot about them.  any help you could give
would be fantastic. patches and contributions are more than welcome.
sometimes it feels like a one man show these days.  i'm very eager to get
more
developers involved (and hopefully some will merit becoming committers).

i've looked into Tiles a little.  Tom Czarniecki also posted a TilesTool
that
he made to the user list.  but i'm not sure how to use it or evaluate it
given
my current level of understanding.  i'd be interested to hear your thoughts
on
it and see your code too (an example of how to use it might help me
understand
:).  anyway, i've reposted his email at the bottom of this one in case you
missed it.

Nathan Bubna
[EMAIL PROTECTED]

-----------------------------------------------------------------
from: [EMAIL PROTECTED]
-----------------------------------------------------------------
Hi there,
I would like to contribute my version of a tiles tool for velocity. This
tool is designed to be used as part of a velocity toolbox and provides a
simple way of accessing struts-tiles defintions to allow velocity templates
to be used in the struts-tiles framework rather than jsp pages. This tool
does not parse nested component contexts since that is not required for my
purposes but it can easily be extended.

I use this tool with the following velocimacro:
## Parse a VM template returned by a Tiles definition.
#macro(tilesParse $name)
#if( $tiles.exists($name) )
#parse( $tiles.get($name) )
#end
#end

Source code follows:
/*
 * $Id: TilesTool.java,v 1.1 2003/07/13 03:51:24 Tom Exp $
 */
package com.tomczarniecki.velocity;

import org.apache.struts.taglib.tiles.ComponentConstants;
import org.apache.struts.tiles.ComponentContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.tools.view.context.ViewContext;
import org.apache.velocity.tools.view.tools.ViewTool;

/**
 * TODO: add description
 *
 * @author  Tom Czarniecki
 * @version $Revision: 1.1 $
 */
public class TilesTool implements ViewTool {

    //
------------------------------------------------------------------------
    // Class variables and constants

    //
------------------------------------------------------------------------
    // Instance variables

    private ViewContext m_viewCtx;

    //
------------------------------------------------------------------------
    // Constructor(s)

    //
------------------------------------------------------------------------
    // Public methods

    public void init(Object obj) {
        if (obj instanceof ViewContext) {
            m_viewCtx = (ViewContext) obj;
        } else {
            throw new IllegalArgumentException(
                    "Tool can only be initialized with a ViewContext");
        }
    }

    public String get(String name) {
        Object ctx =
m_viewCtx.getRequest().getAttribute(ComponentConstants.COMPONENT_CONTEXT);
        if (ctx instanceof ComponentContext) {
            ComponentContext compCtx = (ComponentContext) ctx;
            Object value = compCtx.getAttribute(name);
            if (value instanceof String) {
                return (String) value;
            } else {
                Velocity.warn("Invalid ComponentContext attribute class for
key '" + name +
                        "': expected " + String.class + ", actual " +
getClassName(value));
            }
        } else {
            Velocity.warn("Invalid HttpServletRequest attribute class for
key '" +
                    ComponentConstants.COMPONENT_CONTEXT + "': expected " +
                    ComponentContext.class + ", actual " +
getClassName(ctx));
        }
        return "";
    }

    public boolean exists(String name) {
        String value = get(name);
        return (value.length() > 0);
    }

    //
------------------------------------------------------------------------
    // Private methods

    private String getClassName(Object obj) {
        return (obj != null) ? obj.getClass().getName() : "null";
    }
}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to