我尝试从表单输入创建对象列表。对象是相同的,但它们的值可能不同,它本质上是一个菜单。
我仍然在接触Spring / Thymeleaf,这为一项简单的任务增加了一定程度的复杂性。
我有一个菜单类,一个简单的POJO,然后有一个列表,这些列表定义为bean本身的数据成员:
private ArrayList<GuestMenuOptions> guestMenus;
我读了很多帖子,尝试过很多东西,我正在轻轻地把头靠在桌子上。
我有几个错误,其中大部分都告诉我无法找到列表或列表是空的 - 它目前处于稳定状态,无论我尝试什么,列表将不会填充,即使我加载默认值...不幸的是我的调试器已经死了,这没有帮助。
感谢任何帮助。谢谢
EntryController:
@RequestMapping(method=RequestMethod.GET, value="/")
public String indexPage(Model model) {
model.addAttribute("childMenuOptions", generateChildMenus());
//not sure if this is neccesary...
ArrayList<GuestMenuOptions>guestMenus = new ArrayList<>();
GuestMenuOptions ad1 = new GuestMenuOptions();
GuestMenuOptions ad2 = new GuestMenuOptions();
guestMenus.add(ad1);
guestMenus.add(ad2);
GuestContactBean ctb = new GuestContactBean();
ctb.setGuestMenus(guestMenus);
model.addAttribute("guestContactBean", ctb);
model.addAttribute("formBackingBean", new FormBackingBean());
return "index";
}
形式:
<form modelAttribute="guestBean" class="contact_form" name="rsvp" role="form" th:object="${formBackingBean}" th:action="@{/sendRsvp}" method="post">
<div class="row">
<div class="form-group">
<select name="ad1Starter" id="starterMealAdult1">
<option value="!!!">-Starter-</option>
<option th:field="${guestContactBean.guestMenus[0].starter}" th:each="entry : ${adultMenuOptions.get('starter').entrySet()}" th:value="${entry.key}" th:text="${entry.value}">
</option>
</select>
</div>
<input type="submit"guest name="submit" class="btn default-btn btn-block" value="Send RSVP">
RequestController:
@RequestMapping(value = "/sendRsvp", method = RequestMethod.POST)
public String sendRsvp(@ModelAttribute("guestContactBean") GuestContactBean guestContactBean,
@ModelAttribute("guestMenus") ArrayList<GuestMenuOptions>menus,
BindingResult result) throws MessagingException {
smtpMailSender.send(guestContactBean);
return "thanksMessage";
}
豆类: FormBacking是POJO,根本不参考菜单。 GuestMenuOptions与初学者,沙漠成员相同 guestContactbean没有太多进展,基本字段添加了GuestMenuOptions列表
private String numberOfAdults;
private String eventAttending;
private ArrayList<GuestMenuOptions> guestMenus;
public ArrayList<GuestMenuOptions> getGuestMenus() {
return guestMenus;
}
编辑:
填充工作正常的下拉字段,它被声明为private Map<String, Map<String, String>> adultMenuOptions;
private Map<String, Map<String, String>> childMenuOptions;
然后将它们构建在控制器中,这样每个控制器都可以在“启动器”,“主要”和“启动”之下有多个选项。和沙漠&#39;例如:
starter.put("salmon", "Smoked Salmon");
starter.put("pate", "Chicken Liver Pate");
然后填充下拉列表的值和文本。
如果我可以保存这个Map的状态并将其传回控制器,那也没关系,但我无法解释为什么然后产生了包装列表的创建。
答案 0 :(得分:1)
请重新访问http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html#dropdownlist-selectors。它应该像
一样简单class Animal {
int id;
String name;
}
然后在你的模板中:
<select th:field="*{animalId}">
<option th:each="animal : ${animals}"
th:value="${animal.id}"
th:text="${animal.name}">Wireframe</option>
</select>
我认为您的代码遍布整个地方,并且您将菜单选项与菜单项类型混合在一起。