Kendo ui freemmarker启用JSPSupportServlet

Kendo ui freemmarker启用JSPSupportServlet,kendo-ui,jsp-tags,freemarker,Kendo Ui,Jsp Tags,Freemarker,我的问题很简单。我想使用另一个带有freemarker的标记库。 我在freemarker文档中读到这是可能的。 我想使用kendoui标记库 <%@taglib prefix="kendo" uri="http://www.kendoui.com/jsp/tags"%> 诚恳地 谢谢你的回答。当我使用freemarkerServlet时,它起作用了。 但我想使用一个servlet,它允许我在init方法中配置freemarker,并将html响应解析为responsewriter

我的问题很简单。我想使用另一个带有freemarker的标记库。 我在freemarker文档中读到这是可能的。 我想使用kendoui标记库

<%@taglib prefix="kendo" uri="http://www.kendoui.com/jsp/tags"%>
诚恳地

谢谢你的回答。当我使用freemarkerServlet时,它起作用了。 但我想使用一个servlet,它允许我在init方法中配置freemarker,并将html响应解析为responsewriter

req.setCharacterEncoding(cfg.getOutputEncoding());
resp.setContentType("text/html; charset=" + cfg.getOutputEncoding());
resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Expires", "Thu, 01 Dec 1994 00:00:00 GMT");
Writer out = resp.getWriter();
template.process(page.getRoot(), out);

事实上,我想扩展这里提到的freemarkerServlet类:http://schakrap.wordpress.com/2009/09/05/using-freemarkerservlet-in-google-guice-to-inject-configuration/

但我仍然有同样的错误

至于配置参数TemplatePath是什么意思?

JspTaglibs变量以及定制JSP标记感觉回家所需的整个环境是由freemarker.ext.servlet.FreemarkerServlet设置的。因此,目前使用taglibs的唯一方法是使用FreemarkerServlet,这是为了让您可以在遗留的JSP Model-2框架中使用FTL文件而不是JSP文件

    package presentation;
import java.io.IOException;
import java.io.StringReader;
import java.io.Writer;
import java.text.DateFormat;
import java.util.Locale;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import freemarker.core.Macro;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;

public class ControllerServlet extends freemarker.ext.servlet.FreemarkerServlet
{
    //
    private Configuration   cfg;
    private Handler handler;

    public ControllerServlet()
    {
        super();
    }


    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {

        String userAgentString = "";

        StringBuffer url = req.getRequestURL();

        String sUrl = url.toString();

        // on instancie les classes/structures pour Freemarker
        FreemarkerParameterMap page = new FreemarkerParameterMap();

        handler = new Handler();

        try
        {
            userAgentString = req.getHeader("User-Agent");

            System.out.println("User-Agent : " + userAgentString);

            handler.handle(req, resp, page);

            if (page.getDataType() == FreemarkerParameterMap.AJAX_JSON)
            {
                Gson gson = new GsonBuilder().setDateFormat(DateFormat.FULL).setPrettyPrinting().create();
                Map<String, Object> map = page.getRoot();
                resp.setContentType("application/json;charset=UTF-8");
                resp.getWriter().println(gson.toJson(map));
                resp.getWriter().flush();
            }
            else if (page.getDataType() == FreemarkerParameterMap.HTML_REDIRECT && page.getRedirect() != null)
            {
                resp.sendRedirect(page.getRedirect());
            }
            else if (page.getDataType() == FreemarkerParameterMap.HTML_FORWARD && page.getForward() != null)
            {
                RequestDispatcher rd = req.getRequestDispatcher(page.getForward());
                rd.forward(req, resp);
            } 

            else
            {
                if (page.getTemplate() != null)
                {
                    Template t = cfg.getTemplate("theme/" + page.getTemplate());

                    if (page.getDataType() == FreemarkerParameterMap.AJAX_HTML)
                    {
                        Map mapMacro = t.getMacros();
                        Macro macro = (Macro) mapMacro.get(page.getMacro());
                        t = new Template("name", new StringReader(macro.getSource()+"<@"+page.getMacro()+"/>"), cfg);
                    }
                    else if (page.getDataType() == FreemarkerParameterMap.HTML)
                    {
                    }

                    req.setCharacterEncoding(cfg.getOutputEncoding());
                    resp.setContentType("text/html; charset=" + cfg.getOutputEncoding());
                    resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
                    resp.setHeader("Pragma", "no-cache");
                    resp.setHeader("Expires", "Thu, 01 Dec 1994 00:00:00 GMT");
                    Writer out = resp.getWriter();

                    t.process(page.getRoot(), out);
                }
                else
                {
                    throw new ServletException("aucune action  specifiée");
                }
            } 

        }

        /*catch (EcoliaException e)
        {
        } */
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }


    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {

        doGet(req, resp);
    }


    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException
    {
        // Initialize the FreeMarker configuration;
        // - Create a configuration instance
        cfg = new Configuration();

        // - Templates are stored in the WEB-INF/templates directory of the Web app.
        cfg.setServletContextForTemplateLoading(getServletContext(), "");

        // - Set update dealy to 0 for now, to ease debugging and testing.
        //   Higher value should be used in production environment.
        cfg.setTemplateUpdateDelay(0);

        // - Set an error handler that prints errors so they are readable with
        //   a HTML browser.

        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);

        // - Use beans wrapper (recommmended for most applications) 
        cfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER);

        // - Set the default charset of the template files
        cfg.setDefaultEncoding("UTF-8");

        // - Set the charset of the output. This is actually just a hint, that
        //   templates may require for URL encoding and for generating META element
        //   that uses http-equiv="Content-type".
        cfg.setOutputEncoding("UTF-8");

        // - Set the default locale
        cfg.setLocale(Locale.US);

        System.out.println("init controleur");
    }

}
在web.xml中,我有以下内容:

<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ControllerServlet</servlet-name>
    <servlet-class>presentation.ControllerServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

谢谢你的回答。但我不知道该怎么做。你是说我不能用?要将jsptaglib与freemarker一起使用,我必须做什么?您必须通过FreemarkerServlet使用freemarker,也就是说,以JSP Model-2的方式。请参阅。事实上,我想扩展这里提到的freemarkerServlet类:。但我仍然有同样的错误。请了解配置参数TemplatePath是什么意思?这里描述了TemplatPath:只要您通过FreemarkerSerlvet或其子类调用模板,JspTaglibs变量就应该存在。这不是有条件的。您不是在替换整个数据模型吗。模板上下文?JspTaglibs在数据模型中。
<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ControllerServlet</servlet-name>
    <servlet-class>presentation.ControllerServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>