URL には utf-8 文字が必要です。
たとえば、url に入れる文字列があります。
「ハイランリク」
私はそれをエンコードすると思った:
try{
selected=URLEncoder.encode(selected,"UTF-8");
}catch(Exception e){
e.printStackTrace();
}
try {
FacesContext.getCurrentInstance().getExternalContext().redirect("http://" + serverUrl +"/myjsfpage.jsf?param=" + selected );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
デバッグすると、予想される文字列が表示されます: Hayranl%C4%B1k%24
別のコントローラーでは、それを処理する必要があるため、次の方法で URL を取得します
HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String selected = (String)req.getParameter("param");
if(selected ==null){
//show no result message
return;
}
その後、デコードを試みますが、「デコード前」に、URL から取得した文字列は「Hayranlık$」のようなものです。
try{
selected=URLDecoder.decode(selected,"UTF-8");
}catch(Exception e){
e.printStackTrace();
}
JSF リダイレクトが問題の原因ですか、それともブラウザーの URL が問題を処理していますか?