X-Git-Url: http://git.megacz.com/?p=org.ibex.xt-crawshaw.git;a=blobdiff_plain;f=src%2Fjava%2Forg%2Fibex%2Fxt%2FTemplate.java;h=ac29e8f4dc6230c357b966612ae74b528677956a;hp=8456f611ed7ea9bd7148874d779d31b22a9defd3;hb=59e1d7b4bf7843e12351004b64d6667abefd04c7;hpb=aa4748b4f5c375bedcfac257b684a59906c6f03a diff --git a/src/java/org/ibex/xt/Template.java b/src/java/org/ibex/xt/Template.java index 8456f61..ac29e8f 100644 --- a/src/java/org/ibex/xt/Template.java +++ b/src/java/org/ibex/xt/Template.java @@ -8,13 +8,14 @@ import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.io.IOException; +import java.io.FileNotFoundException; import java.util.*; import org.ibex.util.*; import org.ibex.js.*; public class Template extends JSElement { - public static Template parse(String path, Template.Scope s) throws IOException { + public static Template parse(String path, Template.Scope s) throws FileNotFoundException, IOException { Reader xmlreader = new BufferedReader(new InputStreamReader(new FileInputStream(path))); XML.Document doc = new XML.Document(); doc.parse(xmlreader); @@ -29,6 +30,7 @@ public class Template extends JSElement { case "js": e = new Template.JSTag(e); break; case "foreach": e = new Template.ForEach(e); break; case "children": e = new Template.Children(e); break; + case "redirect": e = new Template.Redirect(e); break; case "transaction": e = new Template.Transaction(e, s); break; //#end @@ -166,6 +168,22 @@ public class Template extends JSElement { public Children(XML.Element e) { super(e); } } + public static final class Redirect extends JSElement { + public Redirect(XML.Element e) { super(e); } + + public void out(Writer w) throws IOException { + loadAttr(); + + try { + Object p = get("page"); if (p != null) undeclare("page"); + if (p == null || !(p instanceof String) || ((String)p).trim().equals("")) + throw new JSElement.Exn("<"+getPrefix()+":redirect> requires 'page' "+ + "attribute to be a valid template path"); + throw new RedirectSignal((String)p); + } catch (JSExn e) { throw new JSElement.Exn(e); } + } + } + // TODO: finish public static final class Transaction extends JSElement { private final Template.Scope scope; // FIXME: HACK. unstatisise all tags, or do this to all