Hi,

I remember having problems with the introspector when accessing
static methods of a class itself. But somehow I cannot believe
that it is causing problems when the class was instantiated.

If you tested removing the "static" from the getter, and it still
does not work:
    public String getPROPERTY() {
        return PROPERTY;
    }
Then my guess goes to the velocity treatment of getters, where
the first letter is uppercased (I don't know if the rest is touched...)
but anyhow, if you tested $const.getPROPERTY() and it also did
not work, then something is really strange...

You might test the following workaround, by adding this to the
class:
    public String get(String key) {
        return "PROPERTY".equals(key) ? PROPERTY
            /* "PROPERTY2".equals(key) ? PROPERTY2 */
            /* more if cascades here... */
               : "";
    }

Somewhere in the velocity contributions there is a FieldIntrospector,
that should help you to avoid the getters totaly. Try searching the
mailing list archives or browsing the SVN repository for it. Also
there was something on setting up the Ueberspector allowing a chain
of user defined introspectors.

Cheers,
Christoph


Matthew Van Horn wrote:
I use a Constants class in my application to hold a bunch of strings used for things like request attribute keys etc. In my templates, I would also like to eliminate the hard-coded strings, and I thought I could do that by using the Constants class as a tool.

<tool>
    <key>const</key>
    <scope>application</scope>
    <class>com.foo.util.Constants</class>
</tool>

public class Constants {

public static final String PROPERTY = "my.property";
//etc..
//I even tried this:
public static String getPROPERTY() {
return PROPERTY;
}
}


in my template
$const.PROPERTY
$const.getPROPERTY()
both turn up as invalid references.

but $const.toString() works, so an object must be there.

Is this something to do with static methods? I added a non-static method to test, but that didn't work either.

Do I need to implement the ViewTool interface? What should I do in init() then?

According to the docs available I thought this was possible, but now I am stumped. Hope I won't feel too stupid upon figuring this out.

Thanks for any help,
Matt Van Horn


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



Reply via email to