【问题标题】:Spring-MVC : two jsps into one controller with one requestMappingSpring-MVC : 两个 jsps 入一个控制器,一个 requestMapping
【发布时间】:2014-09-29 07:57:28
【问题描述】:

我可以为两个 jsps 使用一个请求映射吗?

我目前正在从一个控制器调用一个请求映射,但其中一个 jsps 似乎没有被控制器捕获。

两个jsps的表单动作和表单方法相同:

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>

second.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.

有人可以帮忙吗?

【问题讨论】:

    标签: java javascript spring jsp spring-mvc


    【解决方案1】:

    问题是(错字?)在您的 second.jsp sn-p 的第二行:

    <input type="hidden" id="requestQuoteEmailAddress" name="requestEmailAddress" />
    

    id 属性主要用于客户端引用,与表单提交时无关(参见HTML input - name vs. id)。重要的是name 属性。所以当 POST 请求发送到服务器时,请求正文如下:

    requestEmailAddress=...&productCodes=...&productCodes=...
    

    由于您将处理程序方法参数注释为@RequestParam("requestQuoteEmailAddress"),Spring MVC 会查找 requestQuoteEmailAddress 而不是 requestEmailAddress,因此错误(@RequestParam 的 required 为 true默认)。

    【讨论】:

    • 嗨@qingbo,感谢您的解决方案!我并没有真正看到这一点,这很令人困惑。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2016-02-08
    • 2016-10-04
    • 1970-01-01
    • 2015-08-25
    • 2021-11-21
    • 2016-07-16
    相关资源
    最近更新 更多