SpringMVC:将两个jsp集成到一个控制器中,并使用一个requestMapping
Spring-MVC : two jsps into one controller with one requestMapping
我可以为两个jsp使用一个请求映射吗?
我目前正在从一个控制器调用一个请求映射,但其中一个jsp似乎没有被控制器捕获。
两个jsp都有相同的表单操作和相同的表单方法:
first.jsp看起来像这样:
<form:form method="POST" action="/ShowroomNav/requestQuote" id="requestQuoteForm">
<input type="hidden" value=${product.productCode } name="productCodes" />
<input type="hidden" id="requestQuoteEmailAddress" name="requestQuoteEmailAddress" />
</form:form>
第二个.jsp看起来像这样:
<form:form method="POST" action="/ShowroomNav/requestQuote" id="requestQuoteForm">
<input type="hidden" id="requestQuoteEmailAddress" name="requestEmailAddress" />
<c:forEach var="product" items="${products}">
<input type="hidden" value=${product.productCode } name="productCodes" />
<div class="box">
<img
src="public/productImages/${product.productCode}/${product.productCode}A.jpg"
style="max-width: 100%"
onclick="productProfile('${product.productCode}')" /><br /> <label
class="name">${product.productName}</label>
</div>
</c:forEach>
</form:form>
它们都通过以下javascript调用提交函数:
$("#requestQuoteSubmitButton").one("click",function(){
$("#requestQuoteEmailAddress").val($("#requestQuoteEmailAddressModal").val());
alert($("#requestQuoteEmailAddress").val());
$("#requestQuoteForm").submit();
});
这就是controller.java的样子:
@RequestMapping(value = "/requestQuote", method = RequestMethod.POST) // or GET
public String requestQuote(@RequestParam("requestQuoteEmailAddress") String requestQuoteEmailAddress, @RequestParam("productCodes") String[] productCodes) {
System.out.println(">>>> requesting quotes >>>>");
for(int i=0; i<productCodes.length; i++) {
System.out.println(" Product Codes : " + productCodes[i]);
}
System.out.println("requestQuoteEmailAddress : " + requestQuoteEmailAddress );
System.out.println("<<<<< requesting quotes <<<<");
return "productSearch";
}
所以我不知道为什么second.jsp不能被控制器捕获,因为当我试图提交它时,它总是显示这个错误
HTTP Status 400 - The request sent by the client was syntactically incorrect.
有人能帮忙吗?
问题是(拼写错误?)在第二个.jsp代码段的第二行:
<input type="hidden" id="requestQuoteEmailAddress" name="requestEmailAddress" />
id
属性主要用于客户端引用,在提交表单时并不重要(请参阅HTML输入-名称与id)。重要的是name
属性。因此,当POST请求被发送到服务器时,请求体看起来像:
requestEmailAddress=...&productCodes=...&productCodes=...
由于您将处理程序方法参数注释为@RequestParam("requestQuoteEmailAddress")
,因此Spring MVC会查找requestQuoteEmailAddress,而不是requestEmailAddress,因此会出现错误(默认情况下,@RequestParam
的required为true)。
相关文章:
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何将一个变量从一个控制器传递到合金中的另一个控制器
- 如何从AngularJs中的另一个控制器访问控制器
- 单击angularjs中的另一个控制器时重新加载控制器
- Angularjs - 观察模态窗口从另一个控制器关闭
- 在一个控制器中更新服务变量,并在另一个控制器 - Angular JS中使用更新的值
- 如何使用javascript express node将变量从控制器中的一个方法公开.js到另一个控制器.js
- 将数据从控制器传递到另一个控制器
- 如何从另一个控制器更新控制器的ng重复模型
- 使用DOM中的信息创建一个控制器/服务来持久化数据
- 从另一个控制器调用一个控制器
- 无法更改呼叫另一个控制器
- 如何让一个变量从一个控制器到一个js文件,再到一个渲染的分部
- angularjs调用另一个控制器's函数
- 访问一个控制器的ng隐藏值以在全局控制器中操纵另一个控制器中的ng样式
- 2个不同的控制器:在其中一个控制器的动作上隐藏元素
- 无法使用typescript访问angular中另一个控制器中声明的$rootscope属性
- AngularJS使用MVC动态获取html,附加到主体,并绑定一个控制器
- 角度-将数组中的信息从一个控制器传递到另一个控制器
- AngularJS:一个控制器中更新不同控制器中的值的事件