如果您对Thymeleaf表单与ArrayList对象一起提交和form表单提交list对象感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Thymeleaf表单与ArrayList对象一起提交
如果您对Thymeleaf表单与ArrayList对象一起提交和form表单提交list对象感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Thymeleaf表单与ArrayList对象一起提交的各种细节,并对form表单提交list对象进行深入的分析,此外还有关于ArrayList al = new ArrayList();有什么区别?和ArrayList al = new ArrayList(0)?、ArrayList list = new ArrayList()在这个泛型为Integer的ArrayList中存放一个String类型的对象、ArrayList, LinkedList, CopyOnWriteArrayList, Vector对比、ArrayList.clear、=null、new Arraylist 之间的对比区别的实用技巧。
本文目录一览:- Thymeleaf表单与ArrayList对象一起提交(form表单提交list对象)
- ArrayList al = new ArrayList();有什么区别?和ArrayList al = new ArrayList(0)?
- ArrayList list = new ArrayList()在这个泛型为Integer的ArrayList中存放一个String类型的对象
- ArrayList, LinkedList, CopyOnWriteArrayList, Vector对比
- ArrayList.clear、=null、new Arraylist 之间的对比区别
Thymeleaf表单与ArrayList对象一起提交(form表单提交list对象)
我已经编写了一个简单的程序,用于使用data(ArrayList)进行表单提交,以便从表发送到控制器类。
提交表单时,数据始终为空,不确定我在这里做错了什么。
我几乎要花很多时间来确定问题,但运气不好:(
控制器类 (在Post方法中始终为null的地方)
public class AccountContoller {private ArrayList<AccountwithSelection> allAccountwithSelect = new ArrayList<AccountwithSelection>();public AccountContoller(){ //Written some test data in Array AccountwithSelection accountwithSelection1 = new AccountwithSelection(); accountwithSelection1.setAccountnumber("Acct1"); accountwithSelection1.setIlc("ILC1"); allAccountwithSelect.add(accountwithSelection1); AccountwithSelection accountwithSelection2 = new AccountwithSelection(); accountwithSelection2.setAccountnumber("Acct2"); accountwithSelection1.setIlc("ILC2"); allAccountwithSelect.add(accountwithSelection2);}@RequestMapping(value = "/accountload", method = RequestMethod.GET) String accountload(Model model) { AccountSelectionListWrapper wrapper = new AccountSelectionListWrapper(); wrapper.setAccountList(allAccountwithSelect); model.addAttribute("accountload", wrapper); return "accountload"; }@RequestMapping(value = "/accountload", method = RequestMethod.POST)public String addimeiPost(Model model, @ModelAttribute("accountload") AccountSelectionListWrapper wrapper, HttpServletRequest request) { System.out.println(wrapper.getAccountList()); //Always getting null, why ? return "accountload";}
}
类:AccountwithSelection
public class AccountwithSelection {public String accountnumber, ilc;public String getAccountnumber() { return accountnumber;}public void setAccountnumber(String accountnumber) { this.accountnumber = accountnumber;}public String getIlc() { return ilc;}public void setIlc(String ilc) { this.ilc = ilc;}}
WrapperClass- AccountSelectionListWrapper
public class AccountSelectionListWrapper {public ArrayList<AccountwithSelection> accountList;public ArrayList<AccountwithSelection> getAccountList() { return accountList;}public void setAccountList(ArrayList<AccountwithSelection> accountList) { this.accountList = accountList;}}
HTML表单: (accountload.html)
<form action="#" th:action="accountload" th:object="${accountload}" method="post"> <div> <div class=form-group-1> <input type="submit" value="Send Data" name="action"> </div> </div> <table id="mytable"> <tbody> <tr> <th>ACCOUNT NUMBER</th> </tr> <tr> <trth:each="account, stat : *{accountList}"> <tdth:text="${account.getAccountnumber()}" th:field="*{accountList[__${stat.index}__].accountnumber}" th:value="${account.getAccountnumber()}"></td> </tr> </tbody> </table></form>
答案1
小编典典<td />
元素未与表单一起提交。您需要使用某种输入。它看起来应该像这样:
<td> <input type="text" th:field="*{accountList[__${stat.index}__].accountnumber}" /></td>
或者,如果您要提交而没有将字段视为可编辑,则类似以下内容
<td> <span th:text="${account.accountnumber}" /> <input type="hidden" th:field="*{accountList[__${stat.index}__].accountnumber}" /></td>
ArrayList al = new ArrayList();有什么区别?和ArrayList al = new ArrayList(0)?
ArrayList al = new ArrayList();有什么区别?和ArrayList al = new ArrayList(0)?
答案1
小编典典如果您查看API,它将显示ArrayList()-构造一个初始容量为10的空列表。
ArrayList(int initialCapacity)-构造一个具有指定初始容量的空列表。
ArrayList list = new ArrayList()在这个泛型为Integer的ArrayList中存放一个String类型的对象
java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。
1.刚刚看到的时候,也是很纳闷后来仔细看了下,java的反射机制;
2.这个可以通过java的反射机制来实现;
3.下面是一个例子:
package com.credream.refelect;
------------------------------------------------------------------------------------------------------------------
运行结果:
35
ArrayList, LinkedList, CopyOnWriteArrayList, Vector对比
1. 列表划分为线程安全和线程非安全两类
线程安全:Vector,CopyOnWriteArrayList,Collections.synchronizedList()
线程非安全:ArrayList,LinkedList
2. 底层存储
数组:ArrayList, Vecotr, CopyOnWriteArrayList
双向链表:LinkedList
通过三个添加元素的过程图,来看数据结构
ArrayList,Vector: 底层存储为数组
LinkedList: 底层存储为双向链表
CopyArrayList:底层存储为数组
3. 使用场景和说明
ArrayList
-
底层为数组,适合随机访问
-
删除不会引起数组容量变小
-
动态插入可能涉及到数组长度重新分配
-
为避免频繁的数组扩容,可设置一个合适的初始容量
-
不适用于频繁的在数组中间进行插入删除的场景
LinkedList
-
底层为双向链表,适合频繁删除新增的场景
-
随机访问不友好,需要遍历
Vector
-
线程安全
-
所有的方法都加锁,导致性能较差
CopyOnWriteArrayList
-
线程安全
-
读方法不加锁;修改方法加锁,一次只能一个写线程访问
-
修改时,会拷贝一份内容出来,对拷贝的结果进行操作,最后覆盖之前的内容;每次修改都会先上锁,然后进行数组拷贝,所以性能较ArrayList低;读取无锁,所以读的性能比Vector高(没有竞争);默认初始容量为0
-
遍历和读取都是基于访问时刻列表中的数组进行的;在执行过程中,链表发生修改不会影响遍历和读取的结果(即此时访问的依然是原数组内容)
4. 特性
1. List是有序的
2. ArrayList默认容量为10;
3. LinkedList,CopyOnWriteArrayList默认容量为0
4. new ArrayList<>()内部的数组实际上引用的是一个空数组
5. 需要线程安全的场景,使用CopyOnWriteArrayList(并发读性能好)或Collections.synchronizedList(并发写性能好)来替代Vector
6. ArrayList扩容规则
-
增加原来空间大小的一半
-
如果依然塞不下,则扩充到正好填充满的情况
7. 排序
-
Collections.sort(list, new Comparator(){xxx})
-
若List中的元素,实现了Comparable接口后,可以直接调用Collections.sort(list);
ArrayList.clear、=null、new Arraylist 之间的对比区别
参考博文
1. 使用 ArrayList 的对象方法 clear ()
1 List list = new ArrayList();
2 List list1 = list;
3 list.add(1);
4 list.add(2);
5 list.add(3);
6 list.clear();
ArrayList 对象内部维护一个对象数组 elementData, 当执行 clear () 方法时, 会执行循环将 elementData 中每一个坐标都设置为为 null, 并设置数组的 size 为 0;我们还可以使用该 list 进行操作
clear 源码如下
public void clear() {
modCount++;
// clear to let GC do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
2. 使用 = null
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("1");
list.add("2");
list = null;
直接将变量 list 指向 null,通常当我们不需要再使用 ArrayList 对象时,可以将变量值设为 null,以便 GC 可以运作并回收这部分内存空间。
需要注意的是当仍有其他变量指向该对象时,即使讲变量 list 置为 null 垃圾回收器也无法回收该内存空间。如下:
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> arraylist = list;
list.add("0");
list.add("1");
list.add("2");
list = null; // 此时list变量指向null,而arraylist变量仍然指向原内存空间,原内存空间得不到释放
3. 使用 = new ArrayList ()
方法 3 有点类似于方法 1,都是得到一个空的 ArrayList 对象。不过 new ArrayList () 会得到一个初始化内部数组 elementData 容量为 10 的 ArrayList 对象,而方法 1 得到的对象的容量与原对象一致。值得注意的是使用方法 3 需要进行如在内存中重新开辟内存空间等操作,开销较大,如果只是单纯的想要使用空的 ArrayList 对象,建议使用方法 1,相对来说可尽量避免堆内存溢出问题。
今天关于Thymeleaf表单与ArrayList对象一起提交和form表单提交list对象的介绍到此结束,谢谢您的阅读,有关ArrayList al = new ArrayList();有什么区别?和ArrayList al = new ArrayList(0)?、ArrayList list = new ArrayList()在这个泛型为Integer的ArrayList中存放一个String类型的对象、ArrayList, LinkedList, CopyOnWriteArrayList, Vector对比、ArrayList.clear、=null、new Arraylist 之间的对比区别等更多相关知识的信息可以在本站进行查询。
本文标签: