Salve a tutti,
Ho un problema, assurdo, ho iniziato da poco ad imparare il funzionamento del template engine Freemarker e non so se sia un mio errore.
Ho bisogno di passare un oggetto (bean) ad un file di template .ftl cosi da far stampare i dati membro di quest'oggetto direttamente al file di template.
Ho letto in giro che è una pratica comune. Quando eseguo la servlet viene mostrato un'eccezione dicendo che il dato passato è nullo: ${theObject.title}, se provassi a stampare ${theObject} stampa il riferimento all'oggetto.
Qualche link in cui viene risolto il mio problema:
http://stackoverflow.com/questions/5...d-then-looping
http://freemarker.org/docs/pgui_data...ctWrapper.html
Vi mostro il codice che ho scritto, non riesco proprio a risolvere questo problema
Servlet:
codice:public class servletTest extends HttpServlet { /** * @see Servlet#init(ServletConfig) */ public void init(ServletConfig servConfig) throws ServletException { // TODO Auto-generated method stub try { cfg = config.getConfig(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Questa chiamata permette di chiamare il file di configurazione per il * template */ private Configuration cfg; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); SimpleHash root = new SimpleHash(); // expose a "simple" java objects: root.put("theString", "wombat"); // expose an "arbitrary" java objects: root.put("theObject", new banquet( "Thinking In Java") ); /* Get the template */ Template template = cfg.getTemplate("banquetsList.ftl"); Writer out_template = new StringWriter(); try { template.process( root, out_template ); } catch (TemplateException e) { e.printStackTrace(); } out.write( out_template.toString() ); } }
File di configurazione di freemarker:
codice:private static void build_config() throws IOException{ cfg = new Configuration(); cfg.setServletContextForTemplateLoading( R.context.get_servletContext(), R.path.get_TEMPLATE() ); DefaultObjectWrapper ObjectWrapper = new DefaultObjectWrapper(); cfg.setObjectWrapper( ObjectWrapper.DEFAULT_WRAPPER ); cfg.setDefaultEncoding("UTF-8"); cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER); cfg.setIncompatibleImprovements(new Version(2, 3, 20)); }
Classe di cui viene derivato l'oggetto da passare:
File di templatecodice:class banquet{ banquet( /*int code,*/ String title){ //this.code = code; this.title = title; } public String title; //public int code; }
codice:<html> <body> <h1> lista di banchetti </h1> <div> </div> <div> ${theObject.title} </div> </body> </html>
Che cosa ho sbagliato?? non riesco proprio a capirlo...ho letto nel post precedente, che questo tipo d'approccio viene gestito tramite spring che non vorrei utilizzare perché il mio intento è quello di capire come usare freemarker.
Grazie mille in anticipospero di non aver fatto qualche gaff
ciaooo!!

.

spero di non aver fatto qualche gaff
Rispondi quotando
