簡體   English   中英

無法在spring mvc中的控制器中接收表單數據

[英]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輸入

另一個修復是使用常規HTML input標記來創建表單控件及其名稱屬性。 這將消除Spring 3.0.1path屬性(最終呈現為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM