我有来自数据库的数据表(动态插入)。在一列中,我插入复选框。现在我想选择其中一个并发送到下一个表单(我选择一个产品并将属性发送到另一个表单。在这个表单中应该只显示属性选择产品)。但我不知道插入了什么样的值:field =“* {}”。我尝试了很多解决方案但是没有用。我的html表单包含所有产品表:
<form action="/oferta/zamow" th:action="@{/oferta/zamow}"
th:object="${oferta}" method="post">
<table border="1" id="display-data">
<tr>
<td>#</td>
<td>title</td>
<td>author</td>
<td>rok</td>
<td>cena</td>
<td></td>
</tr>
<tr th:each="produkt, pozycja : ${oferta}">
<td th:text="${pozycja.count}"></td>
<td><span th:text="${produkt.tytul}"></span></td>
<td><span th:text="${produkt.autor}"></span></td>
<td><span th:text="${produkt.rok}"></span></td>
<td><span th:text="${produkt.cena}"></span></td>
<td>
<input type="submit" value="zamow"/>
<!-- <a th:href="@{/zamowienie}">zamow</a> -->
</td>
<td>
<label>zamow</label>
<input type="checkbox" th:field="*{produkt}" th:value="${produkt}"/>
</td>
</tr>
</table>
</form>
显示选择产品的表单:
<form action="/zamowienie/zam" th:action="@{/zamowienie/zam}"
th:object="${zamowienie}" method="post">
<table border="1" id="display-data">
<tr align="center">
<td colspan="2">twoje zamowienie</td>
</tr>
<tr>
<td>tytul</td>
<td><span th:text="${produkt.tytul}"></span></td>
</tr>
<tr>
<td>autor</td>
<td><span th:text="${produkt.autor}"></span></td>
</tr>
<tr>
<td>rok</td>
<td><span th:text="${produkt.rok}"></span></td>
</tr>
<tr>
<td>cena</td>
<td><span th:text="${produkt.cena}"></span></td>
</tr>
<tr>
<td>data zlozenia zamowienia</td>
<td><span th:text="${datazam}"></span></td>
</tr>
</table>
</form>
感谢您的帮助。
答案 0 :(得分:10)
我不确定这是否是您寻求的答案,但您可以在http://www.thymeleaf.org/doc/html/Thymeleaf-Spring3.html#checkbox-fields找到一个示例。
这是一个简单的例子来说明如何在Thymeleaf中使用带有Spring MVC的复选框。
控制器:
@RequestMapping(value = "/showForm", method=RequestMethod.GET)
public String showForm(Model model) {
List<String> allItems = new ArrayList<String>();
allItems.add("value1");
allItems.add("value2");
allItems.add("value3");
model.addAttribute("allItems", allItems);
Foo foo = new Foo();
List<String> checkedItems = new ArrayList<String>();
// value1 will be checked by default.
checkedItems.add("value1");
foo.setCheckedItems(checkedItems);
model.addAttribute("foo", foo);
...
}
@RequestMapping(value = "/processForm", method=RequestMethod.POST)
public String processForm(@ModelAttribute(value="foo") Foo foo) {
// Get value of checked item.
List<String> checkedItems = foo.getCheckedItems();
...
}
HTML:
<form action="#" th:action="@{/processForm}" th:object="${foo}" method="post">
<div th:each="item : ${allItems}">
<input type="checkbox" th:field="*{checkedItems}" th:value="${item}" />
<label th:text="${item}">example</label>
</div>
<input type="submit" />
</form>
Foo.java:
public class Foo {
private List<String> checkedItems;
public List<String> getCheckedItems() {
return checkedItems;
}
public void setCheckedItems(List<String> checkedItems) {
this.checkedItems = checkedItems;
}
}
希望这有帮助。
答案 1 :(得分:2)
看一下百里香弹簧集成文档。
所有th:字段都映射到命令对象。这就是你需要* {}表达式的原因。
模板引擎无法做到的一件事是直接在循环内映射字段。所以你不能使用* {}方法从循环中引用produkt变量。
您需要做的是使用th:each表达式的索引,并使用预先计算的索引表达式构建属性访问器。
<input type="checkbox" th:field="*{produkts[__${index}__].checked" />
你不需要th:value,th:field正在处理它。 (除非你想取代它)