当RequestMapping定义了params时,Spring如何确定Handler

时间:2013-03-20 17:40:17

标签: spring spring-mvc

我为Controller的方法定义了以下@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如何确定处理程序,我可以弄清楚它为什么不匹配。

3 个答案:

答案 0 :(得分:0)

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

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

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

@RequestMapping(value = "{transactionId}/continue")
public void myControllerMethod(@RequestParam String myParameterName)
....

答案 1 :(得分:0)

使用paramValue.equals(request.getParameter(paramName))作为“paramName = paramValue”表单。

答案 2 :(得分: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>