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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.