ここに私の問題があります。誰か助けてください....!
現在、アプリケーションをストラットから 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 用に構成されています。
validateAccount.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 関数を実行する方法。
より良い解決策はありますか?