这是我的问题,有人可以帮助我....!
目前,我正在将应用程序从struts迁移到JSF2。 我们有一个用户验证链接,发送到他们的电子邮件进行验证, 成功注册后。 例如:
http://testserv:5050/bjb/page/validateAccount.faces?Email=qwerty@testsession#1.com&Code=1272
电子邮件地址包含发送给用户的旧链接中的特殊字符。 在新的应用程序中,我们使用URLEncoder.encode对它们进行编码。 我认为,这与UTF-8无关,但是 我将请求,响应和JSF ExternalContext #setResponseCharacterEncoding设置为UTF-8。 tomcat也配置为UTF-8。
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
</h:head>
<h:body>
<h:form acceptcharset="UTF-8" name="verifyUserAccountForm" id="verifyUserAccountForm" prependId="false">
<f:metadata>
<f:event type="preRenderView" listener="#{verifyUserBean.execute}"></f:event>
</f:metadata>
</h:form>
</h:body>
</html>
在java代码中, 。FacesContext.getCurrentInstance()getExternalContext()getRequestParameterMap()得到(PARAMNAME)。 无法正确读取URL GET请求参数。
我应该如何为现有链接解决此问题。
我有一些想法,我可以在我的xhtml页面写一个javascript函数,
这可以在加载时执行,所以使用javascript函数我可以编码参数。
但是如何在<f:event type="preRenderView">
调用之前执行该javascript函数。
有没有更好的解决方案?
答案 0 :(得分:0)
传出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表单接受字符集的效果要差于好处。
请注意,您编辑了右侧Tomcat配置文件中的<Context>
元素。如果你是在Eclipse中管理Tomcat,你默认需要编辑Eclipse的 Servers 项目中的那个,而不是Tomcat的安装文件夹。