Re: accessing JAXB generated properties of a bean (accessing static inner class)
"Walker, Robert" <[email protected]>
| Newsgroups | gmane.comp.web.freemarker.user |
|---|---|
| Message-ID | <[email protected]> |
I want to generate a xml file that can be opened by excel, and that format is pretty Well known so I can use xslt to output the correct spreadsheetML markup, if I can get Freemarker to read my java beans From: Angelo zerr [mailto:[email protected]] Sent: Friday, March 30, 2012 8:15 AM To: Daniel Dekany; FreeMarker-user Subject: Re: [FreeMarker-user] accessing JAXB generated properties of a bean (accessing static inner class) Hi Robert, " wanted to use it to generate spreadsheetML(xml that Excel will open as if it were a xlsx file)" It seems that you wish do the same thing than our XDocReport<http://code.google.com/p/xdocreport/> project. Today we have implemented well docx+odt (and a few pptx). We could start to implement xlsx if you wish and work together? Jus a question : you wish generate a xlsx from scratch or design your xlsx with MS Excel and set Freemarker directive (it's the goal of XDocReport). Regards Angelo Le 30 mars 2012 13:27, Daniel Dekany <[email protected]<mailto:[email protected]>> a écrit : 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]<mailto:[email protected]> https://lists.sourceforge.net/lists/listinfo/freemarker-user ------------------------------------------------------------------------------ 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