package railo.runtime.tag; import railo.runtime.PageSource; import railo.runtime.err.ErrorPageImpl; import railo.runtime.exp.ExpressionException; import railo.runtime.exp.MissingIncludeException; import railo.runtime.ext.tag.TagImpl; /** * Enables the display of customized HTML pages when errors occur. This lets you maintain a * consistent look and feel within your application, even when errors occur. * * * **/ public final class Error extends TagImpl { private ErrorPageImpl errorPage=new ErrorPageImpl(); @Override public void release() { super.release(); errorPage=new ErrorPageImpl(); //exception="any"; //template=null; //mailto=""; } /** set the value exception * Type of exception. Required if type = "exception" or "monitor". * @param exception value to set **/ public void setException(String exception) { errorPage.setTypeAsString(exception.toLowerCase().trim()); //this.exception=exception.toLowerCase().trim(); } /** set the value type * The type of error that the custom error page handles. * @param type value to set * @throws ExpressionException **/ public void setType(String type) throws ExpressionException { type=type.toLowerCase().trim(); if(type.equals("exception")) { errorPage.setType(ErrorPageImpl.TYPE_EXCEPTION); } else if(type.equals("request")) { errorPage.setType(ErrorPageImpl.TYPE_REQUEST); } //else if(type.equals("validation")) this.type=VALIDATION; else throw new ExpressionException("invalid type ["+type+"] for tag error, use one of the following types [exception,request]"); } /** set the value template * The relative path to the custom error page. * @param template value to set * @throws MissingIncludeException **/ public void setTemplate(String template) throws MissingIncludeException { PageSource sf=pageContext.getCurrentPageSource().getRealPage(template); //new PageSource(pageContext.getCurrentTemplateSourceFile(),template); if(!sf.exists()) throw new MissingIncludeException(sf); errorPage.setTemplate(sf); } /** set the value mailto * The e-mail address of the administrator to notify of the error. The value * is available to your custom error page in the MailTo property of the error object. * @param mailto value to set **/ public void setMailto(String mailto) { errorPage.setMailto(mailto); } @Override public int doStartTag() { if(errorPage.getType()==ErrorPageImpl.TYPE_REQUEST) errorPage.setException("any"); pageContext.setErrorPage(errorPage); return SKIP_BODY; } @Override public int doEndTag() { return EVAL_PAGE; } }