真奇怪。我的JSF页面中有一个标记,其中包含一个包含+号的参数。当生成的超链接被单击时,URL将+号转换为空格,因为这是URL中空格的表示方式。
是否有任何方法编码此参数以显示"%2b"(这是urlencoded字符串)而不是+?我使用的是JSF 1.2
<hx:requestLink styleClass="requestLink" id="link31"
action="#{sellingMarginBean.changeView}">
<h:outputText styleClass="outputText" id="text81"
value="#{varsummaryDataList.tier.description}"></h:outputText>
<f:param
value="#{varsummaryDataList.tier.tierCode}"
name="tierCode" id="param51"></f:param>
</hx:requestLink>
如果我改变tierCode的值,将任何'+'替换为'%2b',然后放到屏幕上,这是有效的,但这是一个hack,因为这意味着在我的Tier域对象上创建一个自定义方法或循环通过summaryDataList并执行替换。
Thanks in advance
史蒂夫根据BalusC的这篇文章:
JSP/Servlet请求:在请求处理期间,一般应用服务器将默认使用ISO 8859-1字符编码对请求参数进行url解码。您需要自己强制字符编码为UTF-8。首先:"URL编码"一定不能与"字符编码"混淆。URL编码仅仅是将字符转换成%xx格式的数字表示形式,这样特殊字符就可以毫无问题地通过URL传递。在将字符发送到服务器之前,客户机将对字符进行url编码。服务器应该使用相同的字符编码对字符进行url解码。
所以你的客户端和服务器可能没有使用相同的URL(URI)编码。最好的办法是强制服务器本身使用UTF-8编码。这取决于你使用的是什么服务器。
您也可以使用JSTL的fn:replace
作为参数,作为一种替代的但更"hacky"的解决方案。请记住在名称空间集(xmlns:fn="http://java.sun.com/jsp/jstl/functions"
)中定义JSTL标记库。
<f:param
value="#{fn:replace(varsummaryDataList.tier.tierCode, '+', '%2b'}"
name="tierCode" id="param51" />
参见:
- POST参数在JSF 1.2中使用了错误的编码
- JSF 2.0请求。返回编码错误的字符串
- 我如何在JSF标签中操作字符串?