0

这是我的问题,有人可以帮我....!

目前,我正在将应用程序从 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。

验证帐户.xhtml

<!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().get(paramName); 无法正确读取 URL GET 请求参数。

我应该如何为现有链接解决这个问题。我的想法是,我可以在我的 xhtml 页面中编写一个 javascript 函数,它可以在加载时执行,因此使用 javascript 函数我可以对参数进行编码。但是如何在<f:event type="preRenderView">调用之前执行该javascript函数。

有没有更好的解决方案?

4

1 回答 1

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 表单接受字符集弊大于利。

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

也可以看看

于 2012-11-08T02:28:43.790 回答