gpt4 book ai didi

java - 无法在spring mvc中的 Controller 中接收表单数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:45 25 4
gpt4 key购买 nike

我是 spring mvc 框架的新手,我在从 Controller 的 View 中获取值时遇到了问题。请在下面找到代码。

这是jsp:

<form:form action="envDetails" method="POST" commandName="enviromentForm">
<c:forEach items="${enviromentForm.environments}" varStatus="i" var="env">
Name of Environment<c:out value="${(i.index)+1}"/>:
<form:input path="environments[${i.index}].name" type="text"/>
<br>
Path of Environment<c:out value="${(i.index)+1}"/> :
<form:input path="environments[${i.index}].path" type="text"/>
<br><br>
</c:forEach>
<input class="submitStyle" type="submit" value="SUBMIT" />
</form:form>

这是我的 Controller :

@RequestMapping(value="envDetails",method=RequestMethod.GET)
public ModelAndView setBackingForm(HttpServletRequest request) {
EnviromentForm envf=new EnviromentForm();
envf.setProjectName("Test");
for(int i=0;i<2;i++) {
envf.add(new Enviroment());
}
return new ModelAndView("envDetails","enviromentForm",envf);
}

@RequestMapping(value = "envDetails", method = RequestMethod.POST)
public ModelAndView viewFolderInput(
@ModelAttribute("enviromentForm") EnviromentForm enviromentForm,BindingResult binding,WebRequest request, SessionStatus status) {

***//here I am not receiving the values in enviromentForm***
}

这是 EnviromentForm 类:

public class EnviromentForm {

private String projectName;
private List<Enviroment> environments;

public EnviromentForm() {
environments = new ArrayList<>();
}

public EnviromentForm(String projectName, List<Enviroment> environments) {
this.projectName = projectName;
this.environments = new ArrayList<>();
this.environments.addAll(environments);
}

//getter setter

public void add(Enviroment env) {
this.environments.add(env);
}

}

这是环境类:

public class Enviroment {
private String name;
private String path;

//getter setter

}

非常感谢任何帮助。

最佳答案

主要问题是 Spring MVC 3.0.1 呈现 <form:input>在 HTML 中标记为:

<input id="environments0.path" name="environments0.path" value="" type="text">

注意 name属性缺少方括号 ( [] ),这使其符合 HTML 规范,但会破坏您的数据绑定(bind)。有两种方法可以解决此问题,升级 Spring 或使用常规 input标签。我建议升级 Spring。

升级Spring

第一个解决方案是升级项目 Spring 库。我找到了版本 3.2.5.RELEASE通过网络发送参数如下:

enter image description here

它更正了 3.0.1.RELEASE 中的参数如下图所示:

enter image description here

使用常规 HTML 输入

另一个修复方法是使用常规 HTML input标记来创建表单控件及其名称属性。这将消除修改 Spring 3.0.1正在制作 path属性(最终呈现为 name 属性)。

<input name="environments[${i.index}].name" type="text"/>

关于java - 无法在spring mvc中的 Controller 中接收表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21904308/

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