我一直在这里和在谷歌中寻找这个答案,但没有成功。我将解释我要寻找的内容,看看是否有人可以帮助我。
使用 Spring MCV,我将 A 对象列表“aList”渲染到我的 view.JSP 中。
@RequestMapping(method = RequestMethod.GET)
public final ModelAndView getAList(){
ModelAndView mav = new ModelAndView("view");
List<A> aList = new ArrayList<>();
aList.add(new A("a1");
aList.add(new A("a2");
mav.addObject("aList", aList);
return mav;
}
A 的样子
public class A{
@Getter
@Setter
private String value;
public A(String value){
this.value=value;
}
}
对于列表的每次迭代,我都会创建一个表单。表格看起来像
<c:forEach var="a" items="${aList}"
varStatus="status">
<form:form id="A${a.id}"
method="post" action="save.do"
modelAttribute="a">
<input type="submit" value="Save"/>
</form:form>
</c:forEach>
所以在完成渲染后,我的列表中有很多形式的对象。 您可以想象的每个表单都有他的提交按钮。 现在我想做的是将其中一个表单发送到我的 Controller ,但没有成功,但不是我渲染的整个 A 列表,而是 A。所以我的 Controller 看起来像这样。
RequestMapping(value = "/save", method = RequestMethod.POST)
public final ModelAndView save(@ModelAttribute("a") A a) {
但我收到“IllegalStateException:既不是 BindingResult 也不是 bean 名称的普通目标对象”,因为我的 modelAndView“aList”的渲染名称与“a”不同。
我想我理解的是像表单这样的 Spring MVC 组件不允许提交在渲染中使用的不同类。就算是render类的嵌套类,也有什么不好的。
我想避免再次发送 aList。
有什么想法吗?
问候。
最佳答案
与其尝试回传所选元素的全部内容,不如 考虑回发所选元素的标识符。 例如:
<form:form method="post" action="save.do">
<c:forEach items="${aList}"
var="element"
varStatus="status">
<input type="submit"
name="selectedElementId"
value="${element.id}"/>
</c:forEach>
</form:form>
关于java - Spring MVC 在页面中只提交渲染列表的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23953863/