2

我正在开发一个使用 Spring 框架 3.1.0 版开发的 Web 应用程序。

我有一个 JSP 页面,其中包含一个表单,该表单允许用户从 SELECT 下拉列表框中选择一个国家/地区。提交表单应该运行数据库查询并返回相同的 JSP 页面,其中包括表单以及所选国家/地区的作者和机构数据的 HTML 表。

下面是 JSP 页面的部分代码:

<c:url var="submitUrl" value="/authorsInstitutes.htm"/>
<form:form action="${submitUrl}" method="POST">
   <select id="countryCode">
      <option value="-1">-- Please Select --</option>
         <c:forEach var="country" items="${countryList}">
            <option value="${country.countryCode}">${country.countryName}</option>
         </c:forEach>
   </select>
   <input type="submit"/>
</form:form>

这是控制器类的代码,用于处理“GET”和“POST”请求的方法:

@RequestMapping(value = "/authorsInstitutes", method = RequestMethod.GET)
public ModelAndView displayAuthorsInstitutesForm() {
    ModelAndView mav = new ModelAndView("authorsInstitutes");

    List<Country> countryList = countrySrv.findAll();
    mav.addObject("countryList", countryList);

    return mav;
}

@RequestMapping(value = "/authorsInstitutes", method = RequestMethod.POST)
public ModelAndView displayAuthorsInstitutes(
    @RequestParam(value = "countryCode") String country) {
    ModelAndView mav = new ModelAndView("authorsInstitutes");

    List<Country> countryList = countrySrv.findAll();
    mav.addObject("countryList", countryList);

    if (country != null && !country.trim().equals("")) {
        List<Affiliation> affiliationList = 
            affiliationSrv.getAffiliationsByCountryCode(country);
        mav.addObject("affiliationList", affiliationList);
    }

    return mav;
}

'GET' 请求工作正常,但是当我选择一个国家并提交表单时,我收到 404 错误消息:

HTTP 状态 400 -
类型状态报告
消息
描述客户端发送的请求在语法上不正确 ()。

我确信这很简单,但对于我的生活,我只是没有看到我做错了什么。我将不胜感激任何帮助解决这个问题,谢谢。

4

3 回答 3

0

因为我们countryCode在 POST 方法映射中有一个请求参数。控制器期望在请求中发送参数。这是在下面的代码中

@RequestMapping(value = "/authorsInstitutes", method = RequestMethod.POST)
public ModelAndView displayAuthorsInstitutes(@RequestParam(value = "countryCode") String country) {
 }

更改 jsp 中的选择标记以包含这样的名称属性。

<select id="countryCode" name="countryCode">
  <option value="-1">-- Please Select --</option>
     <c:forEach var="country" items="${countryList}">
        <option value="${country.countryCode}">${country.countryName}</option>
     </c:forEach>
</select>
<input type="submit"/>

这会将 contryCode 分配给选定的选项。试试这个,我希望它会工作。

于 2012-11-17T00:59:27.283 回答
0

使用 Firebug 或任何类似工具,检查countryCode参数是否传递到服务器。我也看到请求映射是

@RequestMapping(value = "/authorsInstitutes", method = RequestMethod.POST)

请求发送到哪里/authorsInstitutes.htm

于 2012-11-16T18:13:47.740 回答
0

您需要从 url 标签中的 url 中删除斜杠,如下所示:

<c:url var="submitUrl" value="authorsInstitutes.htm"/>

如果在jsp中使用带斜线的绝对路径,表单将不会发送数据。

于 2016-10-26T06:34:10.490 回答