[英]Unable to receive form data in controller in spring mvc
我是spring mvc框架的新手,我在控制器中從視圖中獲取值時遇到了問題。 請在下面找到代碼。
這是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>
這是我的控制器:
@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);
}
}
這是Enviroment類:
public class Enviroment {
private String name;
private String path;
//getter setter
}
任何幫助深表感謝。
主要問題是Spring MVC 3.0.1在HTML中呈現<form:input>
標記:
<input id="environments0.path" name="environments0.path" value="" type="text">
請注意, name
屬性缺少括號( []
),這使得它符合HTML規范,但會破壞數據綁定。 有兩種方法可以解決此問題,升級Spring或使用常規input
標記。 我建議升級Spring。
第一個決議是升級Spring庫項目。 我發現版本3.2.5.RELEASE
發送參數如下:
它修正了3.0.1.RELEASE
中的參數,如下所示:
另一個修復是使用常規HTML input
標記來創建表單控件及其名稱屬性。 這將消除Spring 3.0.1
對path
屬性(最終呈現為name
屬性)的修改。
<input name="environments[${i.index}].name" type="text"/>
你有錯誤的請求映射到@Controller(value = "/")
而不是@RequestMapping(value="/")
將它添加到EnvController
。
@Controller
的value元素表示對邏輯組件名稱的建議,將其轉換為Spring bean。 了解更多關於@Controller的信息
此外,為什么需要add()
方法,如果要將Environment添加到列表中,則通過調用environments
getter來添加它
像這樣:
environmentForm.getEnvironments().add(env);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.