首先js中的参数不能是对象,所以要把对象转成json字符串才能传。
第一种情况,传递的对象是js的var对象,那么使用JSON.stringify()可以转换成json字符串,使用JSON.parse()可以重新转换成对象。
第二种情况,在jsp之类的页面上要调用js的function方法,参数是对象,对象是用el表达式表示的。简单的解决方法是不传对象。
比如要传递的对象是
class Student{
String name;
int age;
}
js方法
function func(stu){}
本来理想的情况是func(${stu}) ,但是上文已提过function中参数不能是对象。所以不传对象,改function的参数,改成function func(name,age);调用func(${stu.name},${stu.age});
如果更进一步,要传递的对象是这样的
class Student{
String name;
int age;
Profess profess;//对象
List<Book> bookList;//list
}
这样把对象拆成多个参数的办法也行不通了。
可以使用自定义EL表达式
参考
https://blog.csdn.net/sun5769675/article/details/50352847
标题的问题基本已经解决了,还需要注意一个小问题:
onclick调用function方法时,onclick = "func(${el:toJsonString(stu)})"
json字符串的双引号和onclick的双引号起冲突,把json字符串的双引号改成单引号就可以解决这个问题,改了一下toJsonString方法:
public static String toJsonString(Object obj,int change){
// 将java对象转换为json对象
JSONObject json = JSONObject.fromObject(obj);
String str = json.toString();
if (change !=0){
str = str.replaceAll("\"","\'");//双引号转单引号
}
return str;
}
调用时,onclick = "func(${el:toJsonString(stu,1)})"