5

我有来自数据库的数据表(动态插入)。我在一列中插入复选框。现在我想选择其中一个并发送到下一个表单(我选择一个产品并将属性发送到另一个表单。在这个表单中应该只显示选择产品的属性)。但我不知道在 th: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>

感谢帮助。

4

2 回答 2

11

我不确定这是否是您寻求的答案,但您可以在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;
  }
}

希望这可以帮助。

于 2013-07-18T12:35:52.147 回答
2

查看 thymeleaf spring 集成文档。

所有 th:field 都映射到命令对象。这就是您需要 *{} 表达式的原因。

模板引擎(还)不能做的一件事是直接在循环内映射字段。因此,您不能使用 *{} 方法从循环中引用 produkt 变量。

您需要做的是使用 th:each 表达式的索引并使用索引的预评估表达式构建属性访问器。

<input type="checkbox" th:field="*{produkts[__${index}__].checked" />

您不需要 th:value,th:field 正在处理它。(除非你想取代它)

于 2013-07-17T17:59:41.157 回答