复选框中th:字段属性的值

时间:2013-07-17 06:45:45

标签: spring spring-mvc thymeleaf

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

感谢您的帮助。

2 个答案:

答案 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正在处理它。 (除非你想取代它)