我为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如何确定处理程序,我可以弄清楚它为什么不匹配。
答案 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>