一个关于ajax交互获取对象数组值的问题。

一个关于ajax交互获取对象数组值的问题。

ajax交互

前端:实现一个类似购物车添加商品的功能,例如一个:订单,下面有很多小项,订单表和小项表一对多的表结构。

前端实现是一个form表单记录其它单项参数,小项item一个一个点击添加,然后将form表序列化传递.

前端json格式类似:{user:'xxx',remark:'xxxxx',items:[{id:1,num:1},{id:1,num:2},{id:1,num:3}]}

微信图片_20190606102836.png

页面大致长这样:

微信图片_20190606102843.png

后台controller拿到的参数是这样。

微信图片_20190606102847.png

使用 String[] toolItemsArray = getParaValues("toolItems[]"); 这样的方式拿的值没拿到(不知道是不是我语法不对)

微信图片_20190606102852.png

根据这种格式,我能想到的就是,前端再传递项目items数组的长度值,然后做循环大概类似这样的(还未实现,大致码一下):

比如在传递一个'itemSize'保存前端添加的item的数量

itemSize = getParaToInt('itemSize');

for(i=0;i<itemSize;i++){

istr = i+"";

itemParaIdName = "toolItems["+istr+"][id]";

itemParaNumName = "toolItems["+istr+"][num]";

int itemId = getParaToInt(itemParaIdName);

int itemId = getParaToInt(itemParaNumName);

}


因为第一次使用JFINAL,不熟悉,我也正在查阅文档,不知道有没其它更好的方式比如可以直接获取到一个对象数组,或者List。

请各位指导一下,谢谢。


评论区

JFinal

2019-06-06 10:50

严格按照控制台输出的 jfinal action report 中的 parameter 栏中的 key = value 取值方式就好

例如:
toolItems[1][num] = 1 的取值方式就是:
getPara("toolItems[1][num]")

也就是直接让等号前面的当成 key 去取值就好,数据较多的话,使用 for 循环处理好就可以

一般来说建议使用 getBean 或 getModel 获取整个对象,在 for 循环中使用 getBean/getModel 可以更方便获取整个对象

JFinal

2019-06-06 10:51

不建议使用 getParaValues() 这类方法

iamdego

2019-06-06 11:28

@JFinal 首先为JFINAL点个赞,谢谢回复,而且反馈速度超快,说明社区环境很好。
开始我也是照着demo使用的是getBean,但是这样的方式要求前端传参的命名为表名.字段(或者,表名.get\set属性名),这样导致我的json是{table.name:"xxx"},这样的json格式我如果要在js中再做操作就不方便。例如,我的场景是,先获得传参的json串例如jsonObj = {name:"xxx"},再在前端对某些参数进行一次处理,就会使用:jsonObj.name 去获取参数值。如果参数名是table.name,那么在JS中使用 jsoObj.table.name 是不行的,需要另想办法处理。这个我觉得很不方便。(可能是我还没适应JFINAL,正在阅读中)

JFinal

2019-06-06 11:48

@iamdego getBean、getModel 都可以省去 modelName/tableName 前缀,只要再传个参数即可:
getBean(User.class, "");
也即,第二个参数传入空字符串即可

不仅如此,还可以传入第三个参数,跳过一些无法注入的值:
getBean(User.class, "", true);

然后再 for 循环配合生成合适的参数用于 getBean/getModel,可以实现大部分需求

建议先浏览一下相关文档,节省很多时间

iamdego

2019-06-06 14:38

@JFinal 非常感谢,看到文档那段了,还有红字:
“如果希望传参时避免使用modelName前缀,可以使用空串作为modelName来实现:getModel(Blog.class, ""); 这对开发纯API项目非常有用。”
开始阅读不仔细,没能理解。结合开发再来看,就了然了。

热门反馈

扫码入社