diff --git a/rapidoid-gui/src/main/java/org/rapidoid/gui/GUI.java b/rapidoid-gui/src/main/java/org/rapidoid/gui/GUI.java index 86cd7e0029..9cb218f4c1 100644 --- a/rapidoid-gui/src/main/java/org/rapidoid/gui/GUI.java +++ b/rapidoid-gui/src/main/java/org/rapidoid/gui/GUI.java @@ -30,7 +30,7 @@ import org.rapidoid.gui.input.*; import org.rapidoid.gui.reqinfo.IReqInfo; import org.rapidoid.gui.reqinfo.ReqInfo; -import org.rapidoid.gui.var.LocalVar; +import org.rapidoid.gui.var.ReqDataVar; import org.rapidoid.html.HTML; import org.rapidoid.html.Tag; import org.rapidoid.html.TagWidget; @@ -499,12 +499,26 @@ public static Tag[] mediaList(List found) { return items; } + public static Var var(String name, Class type, T defaultValue) { + return new ReqDataVar<>(name, type, defaultValue); + } + public static Var var(String name, T defaultValue) { - return new LocalVar(name, defaultValue); + return var(name, Cls.of(defaultValue), defaultValue); + } + + public static Var var(String name) { + return var(name, String.class, null); + } + + public static Var> listVar(String name) { + Class> type = U.cast(List.class); + return new ReqDataVar<>(name, type, U.list()); } - public static Var var(String name) { - return var(name, null); + public static Var> listVar(String name, List defaultValue) { + Class> type = U.cast(List.class); + return new ReqDataVar<>(name, type, defaultValue); } public static Object highlight(String text) { diff --git a/rapidoid-gui/src/main/java/org/rapidoid/gui/var/PostedDataVar.java b/rapidoid-gui/src/main/java/org/rapidoid/gui/var/PostedDataVar.java index 25e86bd157..303e777a01 100644 --- a/rapidoid-gui/src/main/java/org/rapidoid/gui/var/PostedDataVar.java +++ b/rapidoid-gui/src/main/java/org/rapidoid/gui/var/PostedDataVar.java @@ -36,7 +36,7 @@ public PostedDataVar(Var var) { @Override public T get() { - return (T) ReqInfo.get().posted().get(name()); + return (T) ReqInfo.get().data().get(name()); } } diff --git a/rapidoid-gui/src/main/java/org/rapidoid/gui/var/LocalVar.java b/rapidoid-gui/src/main/java/org/rapidoid/gui/var/ReqDataVar.java similarity index 59% rename from rapidoid-gui/src/main/java/org/rapidoid/gui/var/LocalVar.java rename to rapidoid-gui/src/main/java/org/rapidoid/gui/var/ReqDataVar.java index 351a1e1573..deff96c244 100644 --- a/rapidoid-gui/src/main/java/org/rapidoid/gui/var/LocalVar.java +++ b/rapidoid-gui/src/main/java/org/rapidoid/gui/var/ReqDataVar.java @@ -3,10 +3,12 @@ import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; import org.rapidoid.cls.Cls; +import org.rapidoid.commons.Err; import org.rapidoid.gui.reqinfo.ReqInfo; import org.rapidoid.u.U; -import java.io.Serializable; +import java.util.Collection; +import java.util.List; /* * #%L @@ -29,25 +31,55 @@ */ @Authors("Nikolche Mihajlovski") -@Since("4.0.0") -public class LocalVar extends WidgetVar { +@Since("5.3.0") +public class ReqDataVar extends WidgetVar { private static final long serialVersionUID = 2761159925375675659L; private final String localKey; + private final Class type; + private final T defaultValue; - public LocalVar(String localKey, T defaultValue) { + public ReqDataVar(String localKey, Class type, T defaultValue) { super(localKey); this.localKey = localKey; + this.type = type; this.defaultValue = defaultValue; } @SuppressWarnings("unchecked") @Override public T get() { - return (T) Cls.convert(U.or(ReqInfo.get().posted().get(localKey), defaultValue), Cls.of(defaultValue)); + Object value = U.or(ReqInfo.get().data().get(localKey), null); + + if (type.equals(List.class)) { + + if (value == null) { + return defaultValue; + + } else if (value instanceof String) { + String s = (String) value; + + if (U.notEmpty(s)) { + return (T) U.list(s); + } else { + return defaultValue; + } + + } else if (value instanceof Collection) { + Collection coll = (Collection) value; + return (T) U.list(coll); + + } else { + throw Err.notExpected(); + } + + } else { + value = U.or(value, defaultValue); + return Cls.convert(value, type); + } } @Override diff --git a/rapidoid-gui/src/main/java/org/rapidoid/gui/var/WidgetVar.java b/rapidoid-gui/src/main/java/org/rapidoid/gui/var/WidgetVar.java index 5ba051a961..2180e88704 100644 --- a/rapidoid-gui/src/main/java/org/rapidoid/gui/var/WidgetVar.java +++ b/rapidoid-gui/src/main/java/org/rapidoid/gui/var/WidgetVar.java @@ -5,8 +5,6 @@ import org.rapidoid.gui.reqinfo.ReqInfo; import org.rapidoid.var.impl.AbstractVar; -import java.io.Serializable; - /* * #%L * rapidoid-gui @@ -29,7 +27,7 @@ @Authors("Nikolche Mihajlovski") @Since("4.0.2") -public abstract class WidgetVar extends AbstractVar { +public abstract class WidgetVar extends AbstractVar { private static final long serialVersionUID = 2761159925375675659L; @@ -38,7 +36,7 @@ public WidgetVar(String name) { } protected boolean getBool() { - Object value = ReqInfo.get().posted().get(name()); + Object value = ReqInfo.get().data().get(name()); return Boolean.TRUE.equals(value) || "true".equals(value); }