JSFページをサポートするBeanでリクエストURLをどのように取得しますか?私はFacesContextのドキュメントを調べてきましたが、見つけることができる最良の方法はひどく長いようです:
public String getRequestURL()
{
Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
if(request instanceof HttpServletRequest)
{
return ((HttpServletRequest) request).getRequestURL().toString();
}else
{
return "";
}
}
編集:機能要件ここでの要件は、サードパーティのjavascriptユーティリティに完全なURLが必要であることです。ユーティリティの使用またはアーキテクチャーはJSFにうまく適合しませんが、この呼び出し以外のすべては適合します。私が見つけたメソッドは機能しますが、FacesContextを深く掘り下げるのは間違っていると感じました。さらに、これは「ビュー」関連の方法で使用されるため、JSF式言語で呼び出すことができる方法があることを望んでいました。
FacesContext
によってJSFフードの下から未加工のサーブレットAPIを引き出す必要がある場合は、間違った場所で作業を行っている可能性があります。これは正しいソリューションだと思った機能要件は何ですか? JSFマネージドBeanの代わりに、実際のServlet
クラスまたはFilter
を使用してはいけませんか?あるいは、同じことを達成するためのより良い「jsfish」方法があるので、リクエストURLがまったく必要ないのではないでしょうか。
機能要件に関する詳細を含めるように質問を更新すると、適切なソリューションを提案できる場合があります。
編集に従って更新:したがって、結局のところ、ビュー側でそれが必要ですか?例えば。 #{bean.requestURL}
? ELですでに暗黙的に使用可能なHttpServletRequest
オブジェクトから取得することもできます。
JSPを使用している場合:
${pageContext.request.requestURL}
または、Faceletsを使用している場合:
#{request.requestURL}
そして今、JavaScriptでそれをどのように必要としますか? JavaScript変数として印刷しますか?そのようです?
var url = '#{request.requestURL}';
その場合は、単に window.location
そのため。
var url = window.location;
ビュー固有の詳細でJSF Beanを散らかす必要はありません。
すべてのHTTPリクエストはFacesコンテキストから取得する必要があるため、この方法を使用する必要があると思います。もちろん、facesコンテキスト取得など、このメソッドの一部を簡略化することもできますが、これらの詳細を抽象化してHttpRequestオブジェクトに直接アクセスできるような種類のフレームワークを使用しない限り、最終的にはその方法です。
よろしく。