action的参数类型有String、Integer、Long、Double、Float、DateTime、Date、Time、Boolean、Decimal、List、Map、Object、Xml、Table
如果要传json格式的数据需要把action中的参数类型设置为Object
action的调用分两种情况
第一种:在x5平台内部调用使用X5提供的调用action的API,需要自己构造ObjectParam类型的参数
如下:
var context = this.getContext(); var valuejson = {"id":"1","fSendName":"快递","fCost":"免邮","fState":"1"}; // 构造参数 var param = new biz.Request.ActionParam(); var objectParam = new biz.Request.ObjectParam(valuejson); param.setObject("jsonParam", objectParam); // 调用动作 biz.Request.sendBizRequest({ "context" : context, "action" : "jsonParamAction", "parameters":param, "callback" : function(data) { data.ignoreError = false; if (data.state) { justep.Util.hint("传入自定义对象参数调用成功"); // 输出返回结果 TextOut.setText(result, data.response); } } });
需要注意的是new biz.Request.ObjectParam的时候有两个参数,如果后端有单独java类去json,可以设置第二个参数为java的类名,如下:
var objectParam = new biz.Request.ObjectParam({
name : “霍金”,
sex : “男”,
age : 70
},“demo.DemoObject”);
这个平台案例中就有,可以参考/UI2/demo/actions/process/invokeAction/mainActivity.w中“自定义对象参数”调用action的实现
其中中的demo.DemoObject对应的是其中中的/BIZ/demo/actions/logic/code/src/demo/DemoObject.java
第二种:用ajax调用,这种情况一般是在地方集成js中调用X5的action,需要JSON.stringify()对json传进行处理
如下:
var valuejson = {"id":"1","fSendName":"快递","fCost":"免邮","fState":"1"}; $.ajax({ async: false, type: 'GET', dataType: 'json', url: "/x5/UI2/system/service/common/bizAction.j", data: { process: '/appdemo/test/process/date/dateProcess', activity: 'mainActivity', action: 'jsonParamAction', jsonParam: JSON.stringify(valuejson) //给action中的object类型的jsonParam参数传参 }, error: function(error ,status,text){ alert("---失败---"); }, success: function(result){ alert("---成功---"); } });
评一波