Re: accessing JAXB generated properties of a bean (accessing static inner class)
Daniel Dekany <[email protected]>
| Newsgroups | gmane.comp.web.freemarker.user |
|---|---|
| Message-ID | <[email protected]> |
How the templates sees the objects depends on the ObjectWrapper. As I
see you are using the DefaultObjectWrapper, which means that when you
write someExp.bar in a template, that it does one of these:
- someExp is instanceof Map, in which case it calls someExp.get("bar")
in Java
- someExp is instanceof org.w3c.dom.Node, in which case it calls
something like someExp.getElementsByTagNameNS(defaultNS, "bar") in
Java
- Some other cases exist that are not relevant for you...
- Otherwise it calls someExp.getBar() in Java (or whatever the
BeanInfo sais the reader method is)
and if you have someExp[numericalIndex] then it will try to do
someExp.get(numericalIndex), the List method. (Unless it's also a
Map... I can't remember which one had priority in that case.)
So keeping these in mind, you thing your code should work? I don't
know... I don't see much from the source code excerpts given. Like how
a NetworkList ended up being a scalar (i.e., a string), I don't know.
Why is it relevant that the classes are generated with JAXB? I mean,
it should be clear that to use the XML-wrapper, the objects had to
implement org.w3c.dom.Node.
--
Best regards,
Daniel Dekany
Friday, March 30, 2012, 5:55:30 AM, Walker, Robert wrote:
> Hi all, I was turned onto freemarker today and really impressed
> with it, and wanted to use it to generate spreadsheetML
> (xml that Excel will open as if it were a xlsx file)
>
> I am having problems accessing properties buried a few layers deep.
>
> Basically, I have a OrganisationInfo class which contains an
> OrganisationInfo. NetworkList object,
> And that networkList property contains a List of Network objects, from which I need to get
> property values.
>
> I am wondering if JAXB has generated something freemarker can’t be used to access in it’s template.
>
> I want to try something like
>
> cfg.setObjectWrapper( new DefaultObjectWrapper() );
> SimpleHash root = new SimpleHash();
> // expose JAXB generated java object
> root.put("organisationInfo", organisationInfo);
>
> then my template has accessing syntax like
>
> <h1> ${organisationInfo.networkList[0].tadigCode} </h1>
>
> Is this possible with freemarker? Is there an example of this anywhere?
> I get various errors Expected hash. organisationInfo.networkList[0]
> evaluated instead to freemarker.template.SimpleScalar.
>
> Thanks all
>
>
>
>
> I have JAXB generated classes like this
>
> OrganisationInfo.java
> =====================
> @XmlRootElement(name = "OrganisationInfo")
> public class OrganisationInfo
> {
> @XmlElement(name = "NetworkList", required = true)
> protected OrganisationInfo.NetworkList networkList;
>
> .
> .
> .
>
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "", propOrder = {"network"})
> public static class NetworkList
> {
> @XmlElement(name = "Network", required = true)
> protected List<Network> network;
> .
> .
> }
> }
>
>
> Network.java
> ============
> @XmlRootElement(name = "Network")
> public class Network
> {
> @XmlElement(name = "TADIGCode", required = true)
> protected String tadigCode;
>
> .
> .
>
> }
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
FreeMarker-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freemarker-user