首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
jfinal该如何接收页面相同名称的数组数据
zlsj80
2017-10-20 15:37
请问各位大神,@
JFinal
,如图家庭成员是不确定,动态的,成员的信息就是一个对象,然后提交时是对象数组,不知道这页面的name属性该是怎么个写法了以及提交到controller中该怎么获取到???
项目:
JFinal
2
2
评论区
JFinal
2017-10-23 10:52
假定表名为 member,以身份证号为例,可以将 input 的 name 做成这个样子:
name="member[0].idNumber"
name="member[1].idNumber"
name="member[2].idNumber"
如上所示,可以在 modelName 上做文章,给添加上一个数组一样的号,当然,你也可以添加下划线,道理是一样的
然后在 controller 中用一个循环来获取就好了:
List memberList = new ArrayList();
for (int i=0; iMember m = getModel(Member.class, "member[" + i + "]");
memberList.add(m);
}
上面是大概的代码,仅给出思路
回复
zlsj80
2017-10-24 14:21
@JFinal
OK已搞定
回复
小鱼儿2
2018-09-11 11:45
我这边是这样的:
页面是一个用户列表
name="user[0].id"
name="user[0].name"
name="user[1].id"
name="user[1].name"
后台接收时候对象:
public class ConThumbnail extends Model{
public void setOrderNumber(java.lang.Integer orderNumber) {
set("order_number", orderNumber);
}
public java.lang.Integer getOrderNumber() {
return get("order_number");
}
}
后台接收controller
List list = new ArrayList();
for(int i =0;i<8;i++){
User m = getModel(User.class, "user["+i+"]");
list.add(m);
}
后台还是一直报错The model attribute name is not exists.,这个怎么解决啊?我的数据库中user表中也有这个name 字段
回复
年轻似水
2018-12-07 11:24
@zlsj80
我也碰到一样需求了 能提供下代码吗?
回复
zlsj80
2018-12-07 14:31
@年轻似水
/**
* 将页面中的数组对象转换成List
* @param request
* @param modelClass
* @param prefix
* @return
*/
public static List batchInjectModel(final HttpServletRequest request,Class modelClass, String prefix){
List modelList = new ArrayList();
int size = getArrayLength(request, prefix);
for (int i = 0; i < size; i++)
modelList.add((T) Injector.injectModel(modelClass, prefix + "[" + i + "]", request, false));
return modelList;
}
/**
* Get array length
* @param request
* @param prefix
* @return
*/
public static int getArrayLength(final HttpServletRequest request, String prefix) {
return getArrayKeys(request, prefix).size();
}
/**
* Get array key beans[0].ID -->beans[0] beans[1].ID -->beans[1]
* @param request
* @param prefix 前缀
* @return
*/
public static Set getArrayKeys(final HttpServletRequest request, String prefix) {
Set keys = new HashSet();
String arrayPrefix = prefix + "[";
String key = null;
Enumeration names = request.getParameterNames();
while (names.hasMoreElements()) {
key = names.nextElement();
if (!key.startsWith(arrayPrefix))
continue;
if (key.indexOf("]") == -1)
continue;
keys.add(key.substring(0, key.indexOf("]") + 1));// Get all bean[X]
}
return keys;
}
调用方法: List beanList = ModelUtil.batchInjectModel(getRequest(),Const.class,"beans");
回复
zlsj80
2018-12-10 17:39
@年轻似水
前端比较渣,不一定适合你,实现方式是这样的:
提交之前使用jquery修改表单元素name属性
var htmlObj = $(".family .layui-col-md12").children(".layui-form-item");
var itemLen = htmlObj.length;
for(var i=0;i $.each($(htmlObj[i]).find("input,select"),function(index,item){
if($(item).attr("class")!="layui-input layui-unselect"){
var name = $(item).attr("name");
if(name!=undefined){
if(name.indexOf(".")!=-1){
$(item).attr("name",name.split(".")[1]);
}
name = $(item).attr("name");
//此处修改name属性为 family[0].name,family[0].age
// family[1].name,family[1].age....family[n].name,family[n].age
$(item).attr("name","family["+i+"]."+name);
}
}
});
}
然后用 jquey的表单序列化方法$(form).serialize()通过ajax提交到服务器端
回复
年轻似水
2018-12-11 10:29
@zlsj80
谢谢啦 正好我前端也是用的layui
回复
你妹啊
2019-05-30 14:45
@JFinal
什么意思
回复
发送
我要反馈
热门反馈
扫码入社
name="member[0].idNumber"
name="member[1].idNumber"
name="member[2].idNumber"
如上所示,可以在 modelName 上做文章,给添加上一个数组一样的号,当然,你也可以添加下划线,道理是一样的
然后在 controller 中用一个循环来获取就好了:
List memberList = new ArrayList();
for (int i=0; iMember m = getModel(Member.class, "member[" + i + "]");
memberList.add(m);
}
上面是大概的代码,仅给出思路