5

私は Freemarker フレームワークを学んでいますが、この質問があります。カスタム オブジェクトをテンプレート ファイルに渡すことはできますか? 私が言ったことを彼らが実行するというこれらの投稿を見ましたが、それは私にとってはうまくいきませんでした。

オブジェクトのリストを Freemarker に渡してからループする

http://freemarker.org/docs/pgui_datamodel_objectWrapper.html

春が私を助けてくれることは知っていますが、それなしで試してみたい.

私のコードはこれです:

サーブレット:

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() );



}



}

構成ファイル:

   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));




}

宴会クラス:

class banquet{

banquet( /*int code,*/ String title){
    //this.code = code;
    this.title = title;
}
public String title;
//public int code;

 }

テンプレート ファイル:

<html>

<body>

    <h1>
        lista di banchetti
    </h1>



    <div>

    </div>

    <div>


               ${theObject.name}
    </div>



</body>

私が間違っているか、Freemarker にバグがありますか? はい、初心者ですが、この問題は冗談です...

事前に感謝します:)

解決

解決策を見つけました!PUBLIC を banquet Bean に追加し、setter メソッドと getter メソッドを配置しました:)

4

0 に答える 0