我在这里遇到一个奇怪的问题,但不确定这是不是错误。 该项目在Spring Framework下运行。
观点:
<form method="GET" action="someUrl.htm" enctype="application/x-www-form-urlencoded" >
<label>Label</label>
<input name="val1" value="${val1}" />
...
<!-- submit button here -->
</form>
使用someUrl.htm
SimpleUrlHandlerMapping
<bean id="parameterMethodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="methodParamNames">
...
</bean>
<bean id="handlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlDecode" value="false" />
<property name="mappings">
<props>
<prop key="**/someUrl.htm">someController</prop>
</props>
</property>
</bean>
我想将%
作为val1
传递。但是当我这样做时,下面的代码返回null:
request.getParameter("val1");
catalina.out显示:
警告:参数:字符解码失败。值'%'的参数'val1'已被忽略。
我发现Spring解码查询字符串而request.getQueryString()
返回val1=%
但不返回val1=%25
。
如何在这里阻止UrlDecoding?
这是一个错误吗?请注意,urlDecode
参数设置为false
。
任何解决问题的想法,因为我真的需要使用像%&=
这样的字符。
答案 0 :(得分:1)
你要做的就是不要使用Spring的参数图。创建一个过滤器,以原始格式读取查询字符串,自己解码,获取所需的值并将它们添加到bean中,以便以后在需要时读取。关于如何做后一部分,我很模糊,因为Spring 2.0.5已经过时了,我告诉你的任何内容都可能无法在该版本中运行。会话范围内的对象应该没问题。
答案 1 :(得分:0)
我遇到了同样的问题。但是,我可以在request.getQueryString()中找到正确的编码。