Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 JSF2读取GET参数中的特殊字符_Jsf 2_Facelets - Fatal编程技术网

Jsf 2 JSF2读取GET参数中的特殊字符

Jsf 2 JSF2读取GET参数中的特殊字符,jsf-2,facelets,Jsf 2,Facelets,这是我的问题,有人能帮帮我吗 目前,我正在将一个应用程序从struts迁移到JSF2。 我们有一个用户验证链接,发送到他们的电子邮件进行验证, 在他们成功注册后。 例如: http://testserv:5050/bjb/page/validateAccount.faces?Email=qwerty@testsession#1.com&Code=1272 在发送给用户的旧链接中,电子邮件地址包含特殊字符。 在新的应用程序中,我们使用URLEncoder.encode对它们进行编码。 我

这是我的问题,有人能帮帮我吗

目前,我正在将一个应用程序从struts迁移到JSF2。 我们有一个用户验证链接,发送到他们的电子邮件进行验证, 在他们成功注册后。 例如:

http://testserv:5050/bjb/page/validateAccount.faces?Email=qwerty@testsession#1.com&Code=1272

在发送给用户的旧链接中,电子邮件地址包含特殊字符。 在新的应用程序中,我们使用URLEncoder.encode对它们进行编码。 我认为,这与UTF-8无关,但是 我将请求、响应和JSF外部上下文#setResponseCharacterEncoding设置为UTF-8。 tomcat也配置为UTF-8

validateAccount.xhtml

在java代码中, FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(paramName); 无法正确读取URL GET请求参数

我应该如何解决现有链接的问题。 我脑子里想的是,我可以在我的xhtml页面中编写一个javascript函数, 这可以在加载时执行,因此使用javascript函数可以对参数进行编码。 但是如何在调用之前执行javascript函数


是否有更好的解决方案?

传出URL中的查询字符串参数应按如下方式编码,其中明确提到所需的字符集:

String emailParam = URLEncoder.encode(email, "UTF-8");
String url = "http://testserv:5050/bjb/page/validateAccount.faces?Email=" + emailParam + "&Code=1272";
应确认Tomcat服务器使用完全相同的字符集解码传入URL:

<Context ... URIEncoding="UTF-8">

这就是编码/解码GET URL所需要做的全部工作。HTML元标记与此无关。HTTP响应编码与此无关。HTML表单accept字符集做得不尽人意

请注意,您编辑了右侧Tomcat配置文件中的
元素。例如,如果您在Eclipse中管理Tomcat,默认情况下需要在Eclipse的Servers项目中编辑Tomcat,而不是在Tomcat的安装文件夹中

另见

在发送给用户的旧链接中,电子邮件地址包含特殊字符。在新的应用程序中,我们使用URLEncoder.encode对它们进行编码。现在的问题只是旧的现有链接,如果有人点击旧链接,就会导致错误。但他们成功地用同一封电子邮件注册了。显然,旧应用程序使用的是不同的字符集,如ISO-8859-1,十年前它通常已经是平台默认字符集(现在仍然是Tomcat解码URL的默认字符集)。
<Context ... URIEncoding="UTF-8">