如何禁止FreeMarker模板错误?我在看:http://freemarker.sourceforge.net/docs/pgui_config_errorhandling.html 但我不明白“TemplateExceptionHandler.IGNORE_HANDLER”。我正在使用Struts2以及如何显示另一个ftl页面而不是显示堆栈跟踪?在FreeMarker模板中处理错误有哪些不同的方法?
class MyTemplateExceptionHandler implements TemplateExceptionHandler {
public void handleTemplateException(TemplateException te, Environment env, java.io.Writer out)
throws TemplateException {
try {
out.write("[ERROR: " + te.getMessage() + "]");
} catch (IOException e) {
throw new TemplateException("Failed to print error message. Cause: " + e, env);
}
}
}
...
cfg.setTemplateExceptionHandler(new MyTemplateExceptionHandler());
找到在http://freemarker.sourceforge.net/docs/pgui_config_errorhandling.html 如何使用这上面的一块?最后一行,cfg从哪里来?
“主入口点FreeMarker的API” ...... http://massapi.com/source/freemarker-2.3.18/src/freemarker/template/Configuration.java.html
所以,这是主要的切入点,我猜CFG来自这个班。我仍然没有看到控制器将如何进入MyTemplateExceptionHandler类。
下一行需要去哪里?
cfg.setTemplateExceptionHandler(new MyTemplateExceptionHandler());
而这仅仅是把这条线放在正确的位置吗?
这是我当前类的样子:
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.Properties;
import freemarker.cache.FileTemplateLoader;
import freemarker.cache.MultiTemplateLoader;
import freemarker.cache.TemplateLoader;
import freemarker.cache.WebappTemplateLoader;
import freemarker.core.Environment;
import freemarker.ext.beans.BeansWrapper;
import freemarker.ext.jsp.TaglibFactory;
import freemarker.ext.servlet.HttpRequestHashModel;
import freemarker.ext.servlet.HttpRequestParametersHashModel;
import freemarker.ext.servlet.HttpSessionHashModel;
import freemarker.ext.servlet.ServletContextHashModel;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.TemplateModel;
import javax.servlet.GenericServlet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.views.JspSupportServlet;
import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.apache.struts2.views.freemarker.ScopesHashModel;
import org.apache.struts2.views.freemarker.StrutsBeanWrapper;
import org.apache.struts2.views.freemarker.StrutsClassTemplateLoader;
import org.omg.CORBA.PUBLIC_MEMBER;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.util.FileManager;
import com.opensymphony.xwork2.util.ValueStack;
public class MyTemplateExceptionHandler extends org.apache.struts2.views.freemarker.FreemarkerManager {
freemarker.template.Configuration configuration = new freemarker.template.Configuration();
public MyTemplateExceptionHandler() {
System.out.println("MyTemplateExceptionHandler constructor()");
configuration.setTemplateExceptionHandler(new Test1());
}
class Test1 implements TemplateExceptionHandler {
@Override
public void handleTemplateException(TemplateException te, Environment env, java.io.Writer out) throws TemplateException {
System.out.println("MyTemplateExceptionHandler1 handleTemplateException()");
try {
out.write("[ERROR TEST TEST: " + te.getMessage() + "]");
} catch (IOException e) {
throw new TemplateException("Failed to print error message. Cause: " + e, env);
}
}
}
}
我的代码进入MyTemplateExceptionHandler构造函数()。但是不能进入MyTemplateExceptionHandler1的handleTemplateException()。我需要做什么?
我仍然看到黄色的FTL堆栈跟踪。
同样的事情正在这个博客上指出:http://blog.cherouvim.com/freemarker-exception-handling/在哪里激动地配置我的freemarker以及如何?我仍然坚持该线路需要去哪里。
我的另一个问题是,在博客上发布的类似乎是一个内部类,我只是将该内部类放入任何类或是外部类?
任何示例?在哪里我可以找到一些代码示例?任何参考?我在哪里可以看到更多?谢谢。 – 2013-02-28 15:00:02
@NomanArain:查看'org.apache.struts2.views.freemarker.FreemarkerManager'类。 – 2013-02-28 19:24:08
嘿,如果你能回答我的最新问题,请真的有帮助。这行代码需要去哪里:cfg.setTemplateExceptionHandler(new MyTemplateExceptionHandler());?这只是把这条线放在正确位置的问题吗? – 2013-02-28 19:28:32