JSF中Request Parameter Map的返回值中缺少字符“+”

时间:2016-02-29 16:42:30

标签: jsf jsf-2 url-encoding http-request-parameters

我正在尝试从我的JSF应用程序中的URL获取参数。网址如下:http://localhost:8088/*******/pages/rh/evaluation/layouts/evaluationLayout.jsf?crt_affectId=RqI+dgtx6q8=

所以这里的参数是crt_affectId,其值是RqI+dgtx6q8=。 当我尝试使用以下代码获取值时:

String cryptedValue = FacesContext.getCurrentInstance().getExternalContext()
    .getRequestParameterValuesMap().get(cryptedKey)[0];

我得到了想要的值,但错过了字符+,因为它被空格替换为。结果值如下:RqI dgtx6q8=

JSF中是否有解决方案来获取完整的值,或者我应该用“+”替换空格?然而,后者不是那种通用且好的方式。

1 个答案:

答案 0 :(得分:2)

+是空间的URL编码表示。所以行为是正确的。这些参数应事先进行URL编码。

如果您可以完全控制这些参数,那么您可以将各个参数值​​进行URL编码,然后再将其传递给ExternalContext#redirect()

String url = "/evaluationLayout.jsf?crt_affectId=" + URLEncoder.encode("RqI+dgtx6q8=", "UTF-8");
ec.redirect(ec.getRequestContextPath() + url);

如果你碰巧使用JSF实用程序库OmniFaces,它可以更方便地完成,因为它的Faces#redirect()实用程序已经透明地处理了这个问题。

Faces.redirect("/evaluationLayout.jsf?crt_affectId=%s", "RqI+dgtx6q8=");

另见: