【问题标题】:Thymeleaf Option Without Selection没有选择的百里香选项
【发布时间】:2019-10-14 10:45:03
【问题描述】:

从控制器中,我返回了一个包含对象列表的对象。我想在没有预选(或默认值,即“选择菜”)的下拉列表中显示这些对象列表,但下拉列表中显示的是列表中预选的最后一个值。

控制器:

@GetMapping(path = "/createOrder")
public ModelAndView displayOrder(OrderFormDetails order) {
    ModelAndView mav = new ModelAndView();
    mav.addObject("order", orderService.displayOrder());
    mav.setViewName("createOrder");
    return mav;
}

型号:

public class OrderFormDetails {

    @NotEmpty(message = "*Please provide your name")
    private String name;

    @NotEmpty(message = "*Please provide your address")
    private String address;

    private List < Dish > dishes;

查看:

<select class="form-control" th:field="*{dishes}" id="dropOperator">
    <option value="" selected="selected">Sélect dish</option>
    <option th:each="dish, itemStat : *{dishes}" th:value="*{dishes[__${itemStat.index}__].id}" th:text="*{dishes[__${itemStat.index}__].title}">
    </option>
</select>

我尝试了多种技巧,但都没有奏效。谢谢...

【问题讨论】:

  • 我有两个问题要问你:为什么displayOrder 接受OrderFormDetails 作为参数,orderService.displayOrder() 返回什么?

标签: java spring spring-boot spring-mvc thymeleaf


【解决方案1】:

通常您不希望在一个字段中混合可能的选项和选定的选项(就像您显然所做的那样)。您需要做的就是将这些事情解耦。可能的步骤可能会有所帮助:

  1. 因为OrderFormDetails 就像您的表单支持bean,它应该包含一个用于选定值的占位符(Dish.id),而不是List 和可能的菜肴。将您的 OrderFormDetails 更改为以下内容:
public class OrderFormDetails {

    @NotEmpty(message = "*Please provide your name")
    private String name;

    @NotEmpty(message = "*Please provide your address")
    private String address;

    private T selectedDish;

    // getters, setters, rest of the class omitted

...其中T 是分配给Dish.id 字段的类型。

  1. 可能的(可选)菜肴应作为模型属性单独提供。将以下行添加到您的 displayOrder 方法中:
mav.addObject("dishes", getDishes());

...其中getDishes() 返回List&lt;Dish&gt;,其中包含作为用户选项的所有菜肴。

  1. 调整您的视图以使用更新的方法:
<select class="form-control" th:field="*{selectedDish}" id="dropOperator">
    <option value="" selected="selected">Sélect dish</option>
    <option th:each="dish : ${dishes}" th:value="${dish.id}" th:text="${dish.title}">
    </option>
</select>

就是这样。这种方法也显示在documentation - th:field 中,&lt;select&gt; 级别指的是表单支持 bean 的字段,而 &lt;option&gt; 元素是从作为 model attribute 提供的单独集合中创建的。

【讨论】:

  • 嘿@oOXAam,我的回答对你有帮助吗?
猜你喜欢
  • 2020-10-31
  • 2018-03-19
  • 2019-10-19
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多