gpt4 book ai didi

java - 令人恼火的 Spring 表单/ Controller 中的空列表

转载 作者:行者123 更新时间:2023-11-30 10:49:31 24 4
gpt4 key购买 nike

我正在尝试根据表单输入创建对象列表。对象相同,但它们的值可能不同,它本质上是一个菜单。

我仍在努力掌握 Spring/Thymeleaf,它给看似简单的任务增加了一定程度的复杂性。

我有一个菜单类,一个简单的 POJO,然后在 bean 本身中有一个定义为数据成员的列表:

    private ArrayList<GuestMenuOptions> guestMenus;

我已经阅读了很多帖子,尝试了很多东西,并且即将把我的头轻轻地靠在 table 上。

我遇到了几个错误,其中大部分要么告诉我无法找到该列表,要么该列表为空 - 它目前处于稳定状态,无论我尝试什么,该列表都不会被填充,甚至当我加载默认值时...不幸的是我的调试器死了,这没有帮助。

感谢任何帮助。谢谢

入口 Controller :

    @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">

请求 Controller :

@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";
}

bean 类:FormBacking 是 POJO,根本没有引用菜单。GuestMenuOptions 与 just starter, desert members 相同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;
然后将它们构建在 Controller 中,以便每个都可以在“starter”、“main”和“desert”下有多个选项,例如:

 starter.put("salmon", "Smoked Salmon");
starter.put("pate", "Chicken Liver Pate");

这将同时填充下拉列表的值和文本。

如果我可以保存此 Map 的状态并将其传回 Controller ,那也很好,但我无法理解为什么会产生包装器列表的创建。

最佳答案

请重新访问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>

我认为您的代码到处都是,您混淆了菜单选择和菜单项类型。

关于java - 令人恼火的 Spring 表单/ Controller 中的空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com