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("---成功---");
}
});
评一波