jsf - JSF 请求参数映射的返回值中缺少字符 "+"

标签 jsf jsf-2 url-encoding http-request-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];

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

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

最佳答案

+ 是空间的 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=");

另请参阅:

关于jsf - JSF 请求参数映射的返回值中缺少字符 "+",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35704823/

相关文章:

使用列表时 JSF selectOneMenu 标记错误

jsf - ejbFacade 为空

java - <f :ajax> Unable to attach <f:ajax> to non-ClientBehaviorHolder parent

java - Lightbox 不添加 jquery-plugins.js,而添加 Tooltip 则添加

javascript - 解决 JSencodeURI 和 ASP Server.URLEncode 之间的中断

java - 必须使用 UTF-16 Url 编码才能在 Java 中提交搜索。我怎么能够?

javascript - 无法在jsf应用程序中使用javascript获取html td元素

java - 将变量保留在 session 范围内而不将其设为静态?

jakarta-ee - Netbeans 在 "JPA Controllers from enetity beans"和 "JSF pages from entity beans"生成不同的 JPA 代码

java - Tomcat/Spring - 获取未解码的参数