Jak zablokować błąd szablonu FreeMarker? Szukam tutaj: http://freemarker.sourceforge.net/docs/pgui_config_errorhandling.html Ale nie rozumiem, jak "TemplateExceptionHandler.IGNORE_HANDLER." Używam Struts2, a także jak wyświetlić inną stronę ftl zamiast wyświetlać śledzenia stosu?Jakie są różne sposoby radzenia sobie z błędami w szablonie 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());
Znaleziony powyższy kawałek na http://freemarker.sourceforge.net/docs/pgui_config_errorhandling.html Jak tego używać? Ta ostatnia linia, skąd pochodzi cfg?
„Główne wejście do API FreeMarker” ... http://massapi.com/source/freemarker-2.3.18/src/freemarker/template/Configuration.java.html
Tak, to jest głównym punktem wejścia, jestem zgadywania cfg pochodzi z tej klasy. Nadal nie widzę, jak kontroler wejdzie do mojej klasy MyTemplateExceptionHandler.
Gdzie musi iść następująca linia?
cfg.setTemplateExceptionHandler(new MyTemplateExceptionHandler());
I czy to tylko kwestia umieszczenia tej linii we właściwym miejscu?
ten sposób moja obecna klasa wygląda następująco:
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);
}
}
}
}
Mój kod jest wchodząc konstruktora MyTemplateExceptionHandler(). Ale nie w MyTemplateExceptionHandler1 handleTemplateException(). Co muszę zrobić?
Wciąż widzę żółty ślad stosu FTL.
To samo dotyczy tego bloga: http://blog.cherouvim.com/freemarker-exception-handling/ Gdzie mogę skonfigurować mój freemarker i jak? Nadal utknąłem, gdzie ta linia musi iść.
Moje inne pytanie brzmi, klasa opublikowana na blogu wydaje się być wewnętrzną klasą, czy po prostu umieszczam tę wewnętrzną klasę w dowolnej klasie, czy jest to zewnętrzna klasa?
Dowolne przykłady? Gdzie mogę znaleźć przykłady kodu? Jakieś referencje? Gdzie mogę się bardziej w to zagłębić? Dziękuję Ci. –
@NomanArain: Wystarczy spojrzeć na klasę 'org.apache.struts2.views.freemarker.FreemarkerManager'. –
Hej, jeśli mógłbyś odpowiedzieć na moje ostatnie pytanie, które byłoby naprawdę pomocne, proszę. Gdzie ta linia będzie musiała przejść: cfg.setTemplateExceptionHandler (new MyTemplateExceptionHandler()) ;? I czy jest to kwestia umieszczenia tej linii we właściwym miejscu? –