显示一个包含+号的JSF requestLink参数



真奇怪。我的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标签中操作字符串?

相关内容

  • 没有找到相关文章

最新更新