Re: how to make freeMarker simply call toString?

Vitaliy Semochkin <[email protected]> Sun, 30 Mar 2014 23:38:35 +0400
Newsgroups gmane.comp.web.freemarker.user
Message-ID <CAHyKpfMTCJU6am8pvt=qtPBYBzLDYBGt+LrJtT0XC-WWkLoRfg@mail.gmail.com>
Hello Dánie,

You advise works great, thank you very much for the fast response!

As for your question, I need it because I do not know the types of
variablles that arrive to my template.

My only option to display it is to follow the rule:
When I have an expression ${someObject.someFieldOrPropertOrMethod} to be
displayed
in case it returns a primitive i want it to be cast to String via it's
Wrapper class (Boolean, Float, etc)
in case it is an object that overrides Object's toString() I want it to be
displayed as a result of toString() execution.
in case it is a sequence that does not override toString() (e.g array,
list, set) I want it to be displayed as
[value1.toString,...,valueN.toString]
in case it is a Map that does not override toString I want it to be
displayed as [{key1.toString(),value1.toString()..., ]

Am I right that all I need to do, is to override BeansWrapper?

Once again, thank you very much for supporting this great project and for a
lighting fast response on Sunday :-)

Regards,
Vitaliy






On Sun, Mar 30, 2014 at 6:35 PM, Daniel Dekany <[email protected]> wrote:

> Hello,
>
> The way it works currently is that if FreeMarker doesn't know how to
> make string out of a value (an FTL sequence or FTL hash in your case),
> it will check if the *wrapped* value (which is made by the
> ObjectWrapper from the plain Java object) implements
> TemplateScalarModel, and if it does, it will use that to generate the
> text to print. So, everything is possible with a custom ObjectWrapper.
>
> As of how to achieve this with an out-of-the box object wrapper...
> BeansWrapper does this if you don't
> beansWrapper.setSimpleMapWrapper(true) it, except for arrays, but the
> toString output of arrays is useless anyway. However, I wouldn't
> recommend setSimpleMapWrapper(false), because it mixes the method
> names with the keys in the map, which can get quite confusing.
>
> But maybe I can give a better answer (or an RFE...) if I know why is
> this needed. So why?
>
> --
> Thanks,
>  Daniel Dekany
>
>
> Sunday, March 30, 2014, 12:16:07 PM, Vitaliy Semochkin wrote:
>
> > Hello,
> >
> > I want to configure Freemarker
> > in order to make it replace
> >
> > every ${object}, ${object.someField}, ${object.someMethod()}
> > in my template with a toString value for the returned object.
> > Even if it is an array, list, map or collection.
> >
> > How to configure freemarkert in order to do so?
> >
> > Regards,
> > Vitaliy
> >
>
>

------------------------------------------------------------------------------

_______________________________________________
FreeMarker-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freemarker-user