且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

处理 FreeMarker 模板中的错误有哪些不同的方法?

更新时间:2023-12-04 19:17:40

如果想在Struts2中设置TemplateExceptionHandlerTemplateExceptionHandler.IGNORE_HANDLER,需要扩展org.apache.struts2.views.freemarker.FreemarkerManager 类,覆盖 initcreateConfiguration 方法并在 struts.properties中配置您的自定义管理器代码>文件.

If you want to set TemplateExceptionHandler to TemplateExceptionHandler.IGNORE_HANDLER in Struts2 you need to extend org.apache.struts2.views.freemarker.FreemarkerManager class, override init and createConfiguration methods and configure your custom manager in struts.properties file.

struts.freemarker.manager.classname = your.package.YourFreeMarkerManager  

更新

您的自定义 FreemarkerManager 应如下所示:

Your custom FreemarkerManager should look like that:

public class MyFreemarkerManager extends
    org.apache.struts2.views.freemarker.FreemarkerManager {

private static final Logger LOG = LoggerFactory
        .getLogger(MyFreemarkerManager.class);

@Override
public void init(ServletContext servletContext) throws TemplateException {
    config = createConfiguration(servletContext);

    // Set defaults:
    config.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
    contentType = DEFAULT_CONTENT_TYPE;

    // Process object_wrapper init-param out of order:
    wrapper = createObjectWrapper(servletContext);
    if(LOG.isDebugEnabled()) {
        LOG.debug("Using object wrapper of class " + wrapper.getClass().getName());
    }
    config.setObjectWrapper(wrapper);

    // Process TemplatePath init-param out of order:
    templatePath = servletContext.getInitParameter(INITPARAM_TEMPLATE_PATH);
    if(templatePath == null) {
        templatePath = servletContext.getInitParameter("templatePath");
    }

    config
            .setTemplateLoader(createTemplateLoader(servletContext, templatePath));

    loadSettings(servletContext);
}

@Override
protected Configuration createConfiguration(ServletContext servletContext)
        throws TemplateException {
    Configuration configuration = new Configuration();

    configuration
            .setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

    if(mruMaxStrongSize > 0) {
        configuration.setSetting(Configuration.CACHE_STORAGE_KEY, "strong:"
                + mruMaxStrongSize);
    }
    if(templateUpdateDelay != null) {
        configuration.setSetting(Configuration.TEMPLATE_UPDATE_DELAY_KEY,
                templateUpdateDelay);
    }
    if(encoding != null) {
        configuration.setDefaultEncoding(encoding);
    }

    configuration.setWhitespaceStripping(true);

    return configuration;
}
}

将该常量放入您的 struts.xml 文件中:

Put that constant in your struts.xml file:

<constant name="struts.freemarker.manager.classname" value="your_package.MyFreemarkerManager" />