0

我为控制器的方法定义了以下@RequestMapping。

@RequestMapping(value = "{transactionId}/continue", params = "submitButton=enterApplication")

在 JSP 中,我定义了以下按钮:

<button type="submit" name="submitButton" id="button.enterApplication" value="enterApplication">
Enter Application
</button>

现代浏览器一切正常。在请求中提交以下内容:

submitButton=enterApplication

但它看起来像 IE7(可能更早),浏览器正在提交按钮标签的内容而不是 value 属性。因此,在这种情况下,它提交以下内容:

submitButton=Enter+Application

请注意“+”符号而不是空格(使用 Fiddler,我能够检查请求并看到上面的参数/值中有“+”)。我很确定这是我的问题所在 - 但我不知道该怎么做。我尝试使用以下@RequestMapping 添加另一种方法:

@RequestMapping(value = "{transactionId}/continue", params = "submitButton=Enter+Application")

但这似乎不起作用。我继续收到以下错误:

javax.servlet.ServletException: No adapter for handler [...]: Does your handler implement a supported interface like Controller?

有没有办法确定 Spring 正在执行什么逻辑来将请求中提交的内容与 @RequestMapping 中定义的参数进行比较?我认为比较空格或“+”字符肯定有问题。

*注意:问题可能不一定是加号 - 这只是我最初的想法。如果我能弄清楚 Spring 是如何确定处理程序的,我也许能够弄清楚它为什么不匹配。

4

3 回答 3

0

您可以在表单上放置一个隐藏字段,而不是使用提交按钮值来发送参数。value="enterApplication"从提交按钮中删除并在表单上放置如下内容:

<input type="hidden" value="enterApplication" name="myParameterName"/>

然后只需将参数添加到您的控制器方法签名中:

@RequestMapping(value = "{transactionId}/continue")
public void myControllerMethod(@RequestParam String myParameterName)
....
于 2013-03-20T18:55:02.623 回答
0

将 aparamValue.equals(request.getParameter(paramName))用于“paramName=paramValue”形式。

于 2013-03-20T20:54:47.057 回答
0

Sotirios Delimanolis 的回答是正确的。我不完全确定为什么它最初不起作用。

回顾一下,以下 RequestMapping 是正确的。

@RequestMapping(value = "{transactionId}/continue", params = "submitButton=Enter Application")

此外,为了支持较旧的浏览器并且不必创建具有不同 RequestMappings 的多个方法,我们决定删除 value 属性并依赖按钮标签的内容。

所以,按钮现在看起来像这样。

<button type="submit" name="submitButton" id="button.enterApplication">
Enter Application
</button>
于 2013-03-26T17:41:30.613 回答