Browse Source

修复中文时无法识别参数的bug

master
richie 7 years ago
parent
commit
127dc34fef
  1. 16
      build.xml
  2. BIN
      install/fr-plugin-rh.iframe-6.3.zip
  3. 1
      lib/report/.gitignore
  4. BIN
      lib/servlet-api.jar
  5. 5
      plugin.xml
  6. 37
      src/com/fr/plugin/form/widget/core/RHIframeAttr.java
  7. 9
      src/com/fr/plugin/form/widget/core/RHIframeSource.java
  8. 50
      src/com/fr/plugin/form/widget/core/TemplateSource.java
  9. 38
      src/com/fr/plugin/form/widget/core/URLSource.java
  10. 41
      src/com/fr/plugin/form/widget/web/widget.rh.iframe.js

16
build.xml

@ -5,9 +5,9 @@
<property name="libs" value="${basedir}/lib"/> <property name="libs" value="${basedir}/lib"/>
<property name="publicLibs" value=""/> <property name="publicLibs" value=""/>
<property name="reportLibs" value="${basedir}/lib/report"/>
<property name="destLoc" value="."/> <property name="destLoc" value="."/>
<property name="classes" value="classes"/> <property name="classes" value="classes"/>
<xmlproperty file="${basedir}/plugin.xml"/> <xmlproperty file="${basedir}/plugin.xml"/>
<property name="current-version" value="${plugin.version}"/> <property name="current-version" value="${plugin.version}"/>
@ -30,6 +30,9 @@
<fileset dir="${publicLibs}"> <fileset dir="${publicLibs}">
<include name="**/*.jar"/> <include name="**/*.jar"/>
</fileset> </fileset>
<fileset dir="${reportLibs}">
<include name="**/*.jar"/>
</fileset>
</path> </path>
<patternset id="resources4Jar"> <patternset id="resources4Jar">
<exclude name="**/.settings/**"/> <exclude name="**/.settings/**"/>
@ -94,6 +97,7 @@
<delete dir="${classes}"/> <delete dir="${classes}"/>
</target> </target>
<target name="jar" depends="super_jar"> <target name="jar" depends="super_jar">
<antcall target="zip"/> <antcall target="zip"/>
</target> </target>
@ -107,12 +111,16 @@
<include name="${plugin-jar}"/> <include name="${plugin-jar}"/>
<include name="plugin.xml"/> <include name="plugin.xml"/>
</fileset> </fileset>
<fileset dir="${libs}">
<include name="*.jar"/>
<include name="*.dll"/>
</fileset>
</copy> </copy>
<zip destfile="${basedir}/${plugin-folder}.zip" basedir="."> <zip destfile="${basedir}/${plugin-folder}.zip" basedir=".">
<include name="${plugin-folder}/*.jar"/> <include name="${plugin-folder}/*.jar"/>
<include name="${plugin-folder}/*.dll"/>
<include name="${plugin-folder}/plugin.xml"/> <include name="${plugin-folder}/plugin.xml"/>
</zip> </zip>
<xmlproperty file="${basedir}/plugin.xml"/> <move file="${plugin-folder}.zip" todir="${destLoc}/install"/>
<move file="${plugin-folder}.zip" todir="${destLoc}/${plugin.name}"/>
</target> </target>
</project> </project>

BIN
install/fr-plugin-rh.iframe-6.3.zip

Binary file not shown.

1
lib/report/.gitignore vendored

@ -0,0 +1 @@
*.jar

BIN
lib/servlet-api.jar

Binary file not shown.

5
plugin.xml

@ -2,12 +2,15 @@
<id>com.fr.solution.plugin.form.widget.rh.iframe</id> <id>com.fr.solution.plugin.form.widget.rh.iframe</id>
<name><![CDATA[网页框控件]]></name> <name><![CDATA[网页框控件]]></name>
<active>yes</active> <active>yes</active>
<version>6.0</version> <version>6.3</version>
<env-version>8.0</env-version> <env-version>8.0</env-version>
<jartime>2016-06-30</jartime> <jartime>2016-06-30</jartime>
<vendor email="solution@finereport.com">solution</vendor> <vendor email="solution@finereport.com">solution</vendor>
<description><![CDATA[网页框控件,仅支持在表单中使用]]></description> <description><![CDATA[网页框控件,仅支持在表单中使用]]></description>
<change-notes><![CDATA[ <change-notes><![CDATA[
[2017-06-20]修复模板类型的网页框参数为中文时候的问题。<br/>
[2017-06-14]模板类型的网页框链接支持数组参数。<br/>
[2017-06-13]修复模板名字不能为中文的问题。<br/>
[2017-03-17]修复公式无法正确解析的问题。<br/> [2017-03-17]修复公式无法正确解析的问题。<br/>
[2016-07-29]网页地址不加http的时候自动加上。<br/> [2016-07-29]网页地址不加http的时候自动加上。<br/>
[2016-07-29]修复不设置网页框地址时会导致整个表单无法展示的BUG。<br/> [2016-07-29]修复不设置网页框地址时会导致整个表单无法展示的BUG。<br/>

37
src/com/fr/plugin/form/widget/core/RHIframeAttr.java

@ -1,18 +1,22 @@
package com.fr.plugin.form.widget.core; package com.fr.plugin.form.widget.core;
import com.fr.base.Formula;
import com.fr.base.ParameterMapNameSpace; import com.fr.base.ParameterMapNameSpace;
import com.fr.general.FArray;
import com.fr.general.xml.GeneralXMLTools; import com.fr.general.xml.GeneralXMLTools;
import com.fr.json.JSONArray; import com.fr.json.JSONArray;
import com.fr.json.JSONException; import com.fr.json.JSONException;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
import com.fr.script.Calculator; import com.fr.script.Calculator;
import com.fr.stable.*; import com.fr.stable.ArrayUtils;
import com.fr.stable.js.WidgetName; 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.CalculatorProvider;
import com.fr.stable.script.NameSpace; 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 com.fr.web.core.SessionIDInfor;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -69,33 +73,16 @@ public class RHIframeAttr implements XMLable, DependenceProvider {
jo.put("dependence", dependence); jo.put("dependence", dependence);
jo.put("valueDependence", dependence); jo.put("valueDependence", dependence);
} }
jo.put("sourceType", source.getSourceType());
} }
} }
public void mixJSONData(JSONArray ja, SessionIDInfor sessionIDInfor, Calculator c) throws JSONException, UtilEvalError { public void mixJSONData(JSONArray ja, SessionIDInfor sessionIDInfor, Calculator c) throws JSONException, UtilEvalError {
NameSpace ns = ParameterMapNameSpace.create(sessionIDInfor.getParameterMap4Execute()); NameSpace ns = ParameterMapNameSpace.create(sessionIDInfor.getParameterMap4Execute());
c.pushNameSpace(ns); 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);
} }
} }

9
src/com/fr/plugin/form/widget/core/RHIframeSource.java

@ -1,7 +1,12 @@
package com.fr.plugin.form.widget.core; 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.script.Calculator;
import com.fr.stable.DependenceProvider; 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.XMLPrintWriter;
import com.fr.stable.xml.XMLable; import com.fr.stable.xml.XMLable;
import com.fr.stable.xml.XMLableReader; 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) { public String getCalculatedUrl(Calculator calculator, HttpServletRequest req) {
return null; return null;
} }
public abstract void mixCalculatedParameters(Calculator c, JSONArray ja, ParameterProvider[] parameters) throws JSONException, UtilEvalError;
@Override @Override
public Object clone() throws CloneNotSupportedException { public Object clone() throws CloneNotSupportedException {
return super.clone(); return super.clone();

50
src/com/fr/plugin/form/widget/core/TemplateSource.java

@ -1,12 +1,22 @@
package com.fr.plugin.form.widget.core; package com.fr.plugin.form.widget.core;
import com.fr.base.Formula;
import com.fr.base.Parameter; import com.fr.base.Parameter;
import com.fr.base.ParameterHelper; import com.fr.base.ParameterHelper;
import com.fr.base.TemplateUtils; import com.fr.base.TemplateUtils;
import com.fr.data.NetworkHelper; import com.fr.data.NetworkHelper;
import com.fr.general.FArray;
import com.fr.general.GeneralUtils;
import com.fr.general.Inter; 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.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.script.CalculatorProvider;
import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader; import com.fr.stable.xml.XMLableReader;
@ -14,7 +24,6 @@ import com.fr.stable.xml.XMLableReader;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@ -46,9 +55,9 @@ public class TemplateSource extends RHIframeSource {
try { try {
String realPath = TemplateUtils.render(path, calculator); String realPath = TemplateUtils.render(path, calculator);
if (realPath.contains(".cpt")) { if (realPath.contains(".cpt")) {
return NetworkHelper.createServletURL(req) + "?reportlet=" + realPath; return NetworkHelper.createServletURL(req) + "?reportlet=" + CodeUtils.cjkEncode(realPath);
} else if (realPath.contains(".frm")) { } else if (realPath.contains(".frm")) {
return NetworkHelper.createServletURL(req) + "?formlet=" + realPath; return NetworkHelper.createServletURL(req) + "?formlet=" + CodeUtils.cjkEncode(realPath);
} }
} catch (Exception e) { } catch (Exception e) {
return null; return null;
@ -66,6 +75,39 @@ public class TemplateSource extends RHIframeSource {
return collections.toArray(new String[collections.size()]); 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 @Override
public String toString() { public String toString() {
return Inter.getLocText("Plugin_RH_Iframe_Template_Path"); return Inter.getLocText("Plugin_RH_Iframe_Template_Path");

38
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.Parameter;
import com.fr.base.ParameterHelper; import com.fr.base.ParameterHelper;
import com.fr.base.TemplateUtils; import com.fr.base.TemplateUtils;
import com.fr.general.FArray;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
import com.fr.general.GeneralUtils; import com.fr.general.GeneralUtils;
import com.fr.general.Inter; 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.script.Calculator;
import com.fr.stable.CodeUtils;
import com.fr.stable.ParameterProvider;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.UtilEvalError; import com.fr.stable.UtilEvalError;
import com.fr.stable.js.WidgetName;
import com.fr.stable.script.CalculatorProvider; import com.fr.stable.script.CalculatorProvider;
import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader; import com.fr.stable.xml.XMLableReader;
@ -74,6 +81,37 @@ public class URLSource extends RHIframeSource {
return collections.toArray(new String[collections.size()]); 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 @Override
public String toString() { public String toString() {
return Inter.getLocText("Plugin_RH_Iframe_Url"); return Inter.getLocText("Plugin_RH_Iframe_Url");

41
src/com/fr/plugin/form/widget/web/widget.rh.iframe.js

@ -122,7 +122,7 @@
waitForInitComplete.push(params.widgetName); waitForInitComplete.push(params.widgetName);
} }
} else { } else {
src = src.appendQuery(params); src = self._appendQuery(src, params);
} }
} }
@ -142,6 +142,45 @@
} }
this._changeIframe(src); 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内容的可用性 * 添加一层遮罩层用于屏蔽iframe内容的可用性

Loading…
Cancel
Save