更新时间:2023-12-04 19:17:40
如果想在Struts2中设置TemplateExceptionHandler
为TemplateExceptionHandler.IGNORE_HANDLER
,需要扩展org.apache.struts2.views.freemarker.FreemarkerManager
类,覆盖 init
和 createConfiguration
方法并在 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" />