JSF 中请求参数映射的 return 值中缺少字符“+”
Missing character "+" in the return value of Request Parameter Map in JSF
我正在尝试从我的 JSF 应用程序中的 URL 获取参数。 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];
我得到了想要的值,但缺少字符 +
,因为它被空白 space 替换为 </code>。结果值如下:<code>RqI dgtx6q8=
.
JSF 中是否有获取完整值的解决方案,或者我是否应该将空白 space 替换为“+”?然而,后者也不是那么通用和好的方法。
+
是 space 的 URL 编码表示。所以行为是正确的。这些参数应该事先进行 URL 编码。
如果您可以完全控制这些参数,那么您可以在将其传递给例如ExternalContext#redirect()
.
String url = "/evaluationLayout.jsf?crt_affectId=" + URLEncoder.encode("RqI+dgtx6q8=", "UTF-8");
ec.redirect(ec.getRequestContextPath() + url);
如果您碰巧使用 JSF 实用程序库 OmniFaces, it can be done more conveniently as its Faces#redirect()
实用程序已经透明地处理了这个问题。
Faces.redirect("/evaluationLayout.jsf?crt_affectId=%s", "RqI+dgtx6q8=");
另请参阅:
- Java URL encoding of query string parameters
我正在尝试从我的 JSF 应用程序中的 URL 获取参数。 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];
我得到了想要的值,但缺少字符 +
,因为它被空白 space 替换为 </code>。结果值如下:<code>RqI dgtx6q8=
.
JSF 中是否有获取完整值的解决方案,或者我是否应该将空白 space 替换为“+”?然而,后者也不是那么通用和好的方法。
+
是 space 的 URL 编码表示。所以行为是正确的。这些参数应该事先进行 URL 编码。
如果您可以完全控制这些参数,那么您可以在将其传递给例如ExternalContext#redirect()
.
String url = "/evaluationLayout.jsf?crt_affectId=" + URLEncoder.encode("RqI+dgtx6q8=", "UTF-8");
ec.redirect(ec.getRequestContextPath() + url);
如果您碰巧使用 JSF 实用程序库 OmniFaces, it can be done more conveniently as its Faces#redirect()
实用程序已经透明地处理了这个问题。
Faces.redirect("/evaluationLayout.jsf?crt_affectId=%s", "RqI+dgtx6q8=");
另请参阅:
- Java URL encoding of query string parameters