我正在为我的大学做一个项目,我们必须使用spring和thymeleaf。我有一个包含Map的窗体类。Map的键是可以购买的项目,值是用户想要购买的每个项目的编号。
我正在尝试根据用户的输入更改Map的值。例如,如果用户的输入如下所示:
然后,在用户单击submit按钮(该按钮通过post请求将项目添加到虚拟购物车)之后,Map应该包含条目<kaeseplatte,2>和<schinkenplate,3>。
据我所知,post请求按预期工作,只是map的值没有更新,因此添加到cart的项目数始终为0。
到目前为止,我已经把自己的方向放在以下问题上,试图解决我的问题,但我还不能完全弄清楚:
Map窗体绑定
thymeleaf+spring boot-如何使用map字段为对象创建窗体
Spring通过Map形成
这是我的课程表:
public class PSForm extends OrderForm {
private Map<CatalogItem, Integer> platten = new HashMap<>();
public PSForm() {
setName("Partyservice");
}
public Map<CatalogItem, Integer> getPlatten() {
return platten;
}
public void setPlatten(Map<CatalogItem, Integer> platten) {
this.platten = platten;
}
这是我的控制器类:
@Controller
@SessionAttributes("warenkorb")
public class BestellungController {
private ArrayList<Event> events;
private Event currentEvent;
@Autowired
private KatalogVerwaltung katalogVerwaltung;
@Autowired
private InventarVerwaltung inventarVerwaltung;
BestellungController() {
events = new ArrayList<Event>();
}
@ModelAttribute("warenkorb")
public Cart initializeCart() {
return new Cart();
}
//katalogVerwaltung.getPSMap() just returns a map with all values set to 0.
@ModelAttribute("partyServiceForm")
public PSForm initializePS() {
PSForm pSForm = new PSForm();
pSForm.setPlatten(katalogVerwaltung.getPSMap());
return pSForm;
}
@PreAuthorize("isAuthenticated()")
@PostMapping("/warenkorb")
String addEvent(@ModelAttribute("partyServiceForm") PSForm pSForm, @ModelAttribute("warenkorb") Cart warenkorb) {
currentEvent = new Partyservice(pSForm);
events.add(currentEvent);
for (Entry<CatalogItem, Integer> item : pSForm.getPlatten().entrySet()) {
inventarVerwaltung.add(item.getKey(), item.getValue());
warenkorb.addOrUpdateItem(item.getKey(), Quantity.of(item.getValue()));
}
}
}
这是我的表单模板,它生成上图中的表单:
<form method="post" th:action="@{/warenkorb}" th:object="${partyServiceForm}">
<input type="hidden" name="type" value="Partyservice"/>
<div class="box">
<h2 class="small-header">Auswahl Platten</h2>
<p class="hint">Bitte geben Sie folgende Informationen an.</p>
<div th:each="catalogitem : ${partyServiceForm.platten}">
<div>
<label for="item" th:text="${catalogitem.key.name}">Anzahl</label>
<input class="text-input" id="item" type="number" name="item" min="0" max="20" step="1" value="0" th:field="*{platten['__${catalogitem.value}__']}"/>
</div><br>
</div>
</form>
如果有人想看,我可以添加katalogverwaltung.getpsmap()的代码。我只是选择省略它,因为这已经是很多代码了。
我希望这不是复制品,如果是的话我很抱歉。我看到的其他问题也有帮助,但我仍在努力理解如何使用表单更新容器。
感谢您抽出时间阅读本文。
暂无答案!
目前还没有任何答案,快来回答吧!