diff --git a/build.xml b/build.xml
index 7d1d9e4..1ce7230 100644
--- a/build.xml
+++ b/build.xml
@@ -5,9 +5,9 @@
+
-
@@ -30,6 +30,9 @@
+
+
+
@@ -94,6 +97,7 @@
+
@@ -107,12 +111,16 @@
+
+
+
+
+
-
-
+
-
+
\ No newline at end of file
diff --git a/install/fr-plugin-rh.iframe-6.3.zip b/install/fr-plugin-rh.iframe-6.3.zip
new file mode 100644
index 0000000..dd8cfc0
Binary files /dev/null and b/install/fr-plugin-rh.iframe-6.3.zip differ
diff --git a/lib/report/.gitignore b/lib/report/.gitignore
new file mode 100644
index 0000000..f23b948
--- /dev/null
+++ b/lib/report/.gitignore
@@ -0,0 +1 @@
+*.jar
\ No newline at end of file
diff --git a/lib/servlet-api.jar b/lib/servlet-api.jar
deleted file mode 100644
index 369143a..0000000
Binary files a/lib/servlet-api.jar and /dev/null differ
diff --git a/plugin.xml b/plugin.xml
index 72acc1e..3fae992 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -2,12 +2,15 @@
com.fr.solution.plugin.form.widget.rh.iframe
yes
- 6.0
+ 6.3
8.0
2016-06-30
solution
+ [2017-06-14]模板类型的网页框链接支持数组参数。
+ [2017-06-13]修复模板名字不能为中文的问题。
[2017-03-17]修复公式无法正确解析的问题。
[2016-07-29]网页地址不加http的时候自动加上。
[2016-07-29]修复不设置网页框地址时会导致整个表单无法展示的BUG。
diff --git a/src/com/fr/plugin/form/widget/core/RHIframeAttr.java b/src/com/fr/plugin/form/widget/core/RHIframeAttr.java
index f331f5d..7edf689 100644
--- a/src/com/fr/plugin/form/widget/core/RHIframeAttr.java
+++ b/src/com/fr/plugin/form/widget/core/RHIframeAttr.java
@@ -1,18 +1,22 @@
package com.fr.plugin.form.widget.core;
-import com.fr.base.Formula;
import com.fr.base.ParameterMapNameSpace;
-import com.fr.general.FArray;
import com.fr.general.xml.GeneralXMLTools;
import com.fr.json.JSONArray;
import com.fr.json.JSONException;
import com.fr.json.JSONObject;
import com.fr.script.Calculator;
-import com.fr.stable.*;
-import com.fr.stable.js.WidgetName;
+import com.fr.stable.ArrayUtils;
+import com.fr.stable.DependenceProvider;
+import com.fr.stable.ParameterProvider;
+import com.fr.stable.UtilEvalError;
import com.fr.stable.script.CalculatorProvider;
import com.fr.stable.script.NameSpace;
-import com.fr.stable.xml.*;
+import com.fr.stable.xml.StableXMLUtils;
+import com.fr.stable.xml.XMLPrintWriter;
+import com.fr.stable.xml.XMLReadable;
+import com.fr.stable.xml.XMLable;
+import com.fr.stable.xml.XMLableReader;
import com.fr.web.core.SessionIDInfor;
import javax.servlet.http.HttpServletRequest;
@@ -69,33 +73,16 @@ public class RHIframeAttr implements XMLable, DependenceProvider {
jo.put("dependence", dependence);
jo.put("valueDependence", dependence);
}
+ jo.put("sourceType", source.getSourceType());
}
}
public void mixJSONData(JSONArray ja, SessionIDInfor sessionIDInfor, Calculator c) throws JSONException, UtilEvalError {
NameSpace ns = ParameterMapNameSpace.create(sessionIDInfor.getParameterMap4Execute());
c.pushNameSpace(ns);
- for (int i = 0; i < (parameters == null ? 0 : parameters.length); i++) {
- Object obj = parameters[i].getValue();
- if (obj instanceof Formula) {
- String content = ((Formula) obj).getContent();
- obj = c.evalValue(content);
- }
- JSONObject jo = new JSONObject();
- if (obj instanceof String) {
- obj = CodeUtils.cjkEncode((String) obj);
- jo.put(parameters[i].getName(), obj);
- } else if (obj instanceof FArray) {
- obj = ((FArray) obj).cjkEncode();
- jo.put(parameters[i].getName(), obj);
- } else if (obj instanceof WidgetName) {
- jo.put("widgetName", ((WidgetName) obj).getName());
- } else {
- // 还可以是数字啊什么的
- jo.put(parameters[i].getName(), obj);
- }
- ja.put(jo);
+ if (source != null) {
+ source.mixCalculatedParameters(c, ja, parameters);
}
}
diff --git a/src/com/fr/plugin/form/widget/core/RHIframeSource.java b/src/com/fr/plugin/form/widget/core/RHIframeSource.java
index aec6d43..4fb4097 100644
--- a/src/com/fr/plugin/form/widget/core/RHIframeSource.java
+++ b/src/com/fr/plugin/form/widget/core/RHIframeSource.java
@@ -1,7 +1,12 @@
package com.fr.plugin.form.widget.core;
+import com.fr.json.JSONArray;
+import com.fr.json.JSONException;
+import com.fr.json.JSONObject;
import com.fr.script.Calculator;
import com.fr.stable.DependenceProvider;
+import com.fr.stable.ParameterProvider;
+import com.fr.stable.UtilEvalError;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLable;
import com.fr.stable.xml.XMLableReader;
@@ -30,10 +35,14 @@ public abstract class RHIframeSource implements XMLable, DependenceProvider {
}
+ public abstract String getSourceType();
+
public String getCalculatedUrl(Calculator calculator, HttpServletRequest req) {
return null;
}
+ public abstract void mixCalculatedParameters(Calculator c, JSONArray ja, ParameterProvider[] parameters) throws JSONException, UtilEvalError;
+
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
diff --git a/src/com/fr/plugin/form/widget/core/TemplateSource.java b/src/com/fr/plugin/form/widget/core/TemplateSource.java
index af9a444..7f5bd18 100644
--- a/src/com/fr/plugin/form/widget/core/TemplateSource.java
+++ b/src/com/fr/plugin/form/widget/core/TemplateSource.java
@@ -1,12 +1,22 @@
package com.fr.plugin.form.widget.core;
+import com.fr.base.Formula;
import com.fr.base.Parameter;
import com.fr.base.ParameterHelper;
import com.fr.base.TemplateUtils;
import com.fr.data.NetworkHelper;
+import com.fr.general.FArray;
+import com.fr.general.GeneralUtils;
import com.fr.general.Inter;
+import com.fr.json.JSONArray;
+import com.fr.json.JSONException;
+import com.fr.json.JSONObject;
+import com.fr.json.JSONUtils;
import com.fr.script.Calculator;
-import com.fr.stable.ArrayUtils;
+import com.fr.stable.CodeUtils;
+import com.fr.stable.ParameterProvider;
+import com.fr.stable.UtilEvalError;
+import com.fr.stable.js.WidgetName;
import com.fr.stable.script.CalculatorProvider;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader;
@@ -14,7 +24,6 @@ import com.fr.stable.xml.XMLableReader;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
/**
@@ -46,9 +55,9 @@ public class TemplateSource extends RHIframeSource {
try {
String realPath = TemplateUtils.render(path, calculator);
if (realPath.contains(".cpt")) {
- return NetworkHelper.createServletURL(req) + "?reportlet=" + realPath;
+ return NetworkHelper.createServletURL(req) + "?reportlet=" + CodeUtils.cjkEncode(realPath);
} else if (realPath.contains(".frm")) {
- return NetworkHelper.createServletURL(req) + "?formlet=" + realPath;
+ return NetworkHelper.createServletURL(req) + "?formlet=" + CodeUtils.cjkEncode(realPath);
}
} catch (Exception e) {
return null;
@@ -66,6 +75,39 @@ public class TemplateSource extends RHIframeSource {
return collections.toArray(new String[collections.size()]);
}
+ @Override
+ public void mixCalculatedParameters(Calculator c, JSONArray ja, ParameterProvider[] parameters) throws JSONException, UtilEvalError {
+ if (parameters == null) {
+ return;
+ }
+ // richie:这里的key/value不需要做CJKEncode,在前端会处理的
+ for (ParameterProvider parameter : parameters) {
+ JSONObject jo = JSONObject.create();
+ String key = parameter.getName();
+ Object obj = parameter.getValue();
+ if (obj instanceof Formula) {
+ String content = ((Formula) obj).getContent();
+ obj = c.evalValue(content);
+ }
+ if (obj instanceof String) {
+ jo.put(parameter.getName(), obj);
+ } else if (obj instanceof FArray) {
+ jo.put(key, obj);
+ } else if (obj instanceof WidgetName) {
+ jo.put("widgetName", ((WidgetName) obj).getName());
+ } else {
+ // 还可以是数字啊什么的
+ jo.put(key, obj);
+ }
+ ja.put(jo);
+ }
+ }
+
+ @Override
+ public String getSourceType() {
+ return "tpl";
+ }
+
@Override
public String toString() {
return Inter.getLocText("Plugin_RH_Iframe_Template_Path");
diff --git a/src/com/fr/plugin/form/widget/core/URLSource.java b/src/com/fr/plugin/form/widget/core/URLSource.java
index e073b29..6a26465 100644
--- a/src/com/fr/plugin/form/widget/core/URLSource.java
+++ b/src/com/fr/plugin/form/widget/core/URLSource.java
@@ -4,12 +4,19 @@ import com.fr.base.Formula;
import com.fr.base.Parameter;
import com.fr.base.ParameterHelper;
import com.fr.base.TemplateUtils;
+import com.fr.general.FArray;
import com.fr.general.FRLogger;
import com.fr.general.GeneralUtils;
import com.fr.general.Inter;
+import com.fr.json.JSONArray;
+import com.fr.json.JSONException;
+import com.fr.json.JSONObject;
import com.fr.script.Calculator;
+import com.fr.stable.CodeUtils;
+import com.fr.stable.ParameterProvider;
import com.fr.stable.StableUtils;
import com.fr.stable.UtilEvalError;
+import com.fr.stable.js.WidgetName;
import com.fr.stable.script.CalculatorProvider;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader;
@@ -74,6 +81,37 @@ public class URLSource extends RHIframeSource {
return collections.toArray(new String[collections.size()]);
}
+ @Override
+ public void mixCalculatedParameters(Calculator c, JSONArray ja, ParameterProvider[] parameters) throws JSONException, UtilEvalError {
+ for (int i = 0; i < (parameters == null ? 0 : parameters.length); i++) {
+ Object obj = parameters[i].getValue();
+ if (obj instanceof Formula) {
+ String content = ((Formula) obj).getContent();
+ obj = c.evalValue(content);
+ }
+ JSONObject jo = JSONObject.create();
+ if (obj instanceof String) {
+ obj = CodeUtils.cjkEncode((String) obj);
+ jo.put(parameters[i].getName(), obj);
+ } else if (obj instanceof FArray) {
+ obj = ((FArray) obj).cjkEncode();
+ jo.put(parameters[i].getName(), obj);
+ } else if (obj instanceof WidgetName) {
+ jo.put("widgetName", ((WidgetName) obj).getName());
+ } else {
+ // 还可以是数字啊什么的
+ jo.put(parameters[i].getName(), obj);
+ }
+
+ ja.put(jo);
+ }
+ }
+
+ @Override
+ public String getSourceType() {
+ return "url";
+ }
+
@Override
public String toString() {
return Inter.getLocText("Plugin_RH_Iframe_Url");
diff --git a/src/com/fr/plugin/form/widget/web/widget.rh.iframe.js b/src/com/fr/plugin/form/widget/web/widget.rh.iframe.js
index c532c92..5497fb3 100644
--- a/src/com/fr/plugin/form/widget/web/widget.rh.iframe.js
+++ b/src/com/fr/plugin/form/widget/web/widget.rh.iframe.js
@@ -122,7 +122,7 @@
waitForInitComplete.push(params.widgetName);
}
} else {
- src = src.appendQuery(params);
+ src = self._appendQuery(src, params);
}
}
@@ -142,6 +142,45 @@
}
this._changeIframe(src);
},
+ /**
+ * 给url加上给定的参数
+ * @param {String} src 原地址
+ * @param {Object} paras 参数对象,是一个键值对对象
+ * @return {String} 添加了给定参数的url
+ */
+ _appendQuery: function (src, paras) {
+ if (!paras) {
+ return src;
+ }
+ // 没有问号说明还没有参数
+ if (src.indexOf("?") === -1) {
+ src += "?";
+ }
+ // 如果以问号结尾,说明没有其他参数
+ if (src.endWith("?") !== false) {
+ } else {
+ src += "&";
+ }
+ debugger;
+ // 模板
+ if (this.options.sourceType == 'tpl') {
+ $.each(paras, function (pName, pValue) {
+ if (FR.isArray(pValue)) {
+ paras[pName] = pValue;
+ } else {
+ paras[pName] = encodeURIComponent(pValue);
+ }
+ });
+ src += "__parameters__=" + FR.cjkEncode(FR.jsonEncode(paras));
+ } else {
+ $.each(paras, function (name, value) {
+ if (typeof(name) === 'string') {
+ src += name + "=" + value + "&";
+ }
+ });
+ }
+ return encodeURI(src);
+ },
/**
* 添加一层遮罩层,用于屏蔽iframe内容的可用性