4

私はURLこのようにhttp://myDomain/ myWAR/myServletReceiverを持っています

WAR ファイル名やサーブレット レシーバー名をエンド ユーザーに知られたくありません。そこで、この URL を http:/myDomain/ MyAccount のようなものにパーソナライズしようと考えまし

これを実現するために、以下のコードを追加しました。

独自のパッケージを作成しました。以下のコード。

package myOwnPackage
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;
import javax.faces.application.ViewHandler;
import javax.faces.context.FacesContext;
import com.sun.facelets.FaceletViewHandler;


public class DynamicViewHandler extends FaceletViewHandler{

    public DynamicViewHandler(ViewHandler parent) {

        super(parent);
        System.out.println("Entered into DynamicViewHandler");
    }

    public String getActionURL(FacesContext context, String viewId) {
        System.out.println("Inside getActionURL");

        ExpressionFactory expressionFactory = context.getApplication().getExpressionFactory();
        ValueExpression valueExpression = expressionFactory.createValueExpression(context.getELContext(), viewId, String.class);
        String result = (String) valueExpression.getValue(context.getELContext());

        System.out.println("Value of Result is:" +result);

            //I am in the beginning steps and just want to print the value of "result" for each response
        return result;
    }

}

これで登録しましたfaces-config.xml

<application>
<view-handler>myOwnPackage.FaceletViewHandler</view-handler>
<state-manager>org.jboss.portletbridge.application.PortletStateManager</state-manager>
</application>

アプリケーションにアクセスすると、サーブレットがリダイレクトするウェルカム ページは/jsp/html/index.xhtml.

そのため、ログには以下の値が出力されます。

Entered into DynamicViewHandler

Value of Result is:/jsp/html/index.xhtml

ページ内に他のリンクがありindex.jsfます。他のリンクをクリックすると、ブラウザに以下のエラー メッセージが表示されます (に移動する代わりに/jsp/html/secondPage.jsf)

http:/myDomain/jsp/html/index.html not found (404) error.

私の中に間違いなく欠けているものがありDynamicViewHandler、それ以上のものfaces-config.xmlがあるかもしれません。

ここで他に何が欠けていますか?

jsp/html/secondPage.jsfまた、私はにマッピングしたいと思います/MyAccount

4

2 に答える 2

1

元の URL の代わりに別の URL を表示します。

方法 1 :

ファイル名は pretty-config.xml です。

このファイルを使用すると、実際のパッチ以外の別の URL を表示できます。

例:

この 2 行の単純な構成により、ユーザーには次のように表示されます: ブラウザー URL と出力 HTML に pattern="/mySite/" が表示されますが、サーバーは実際にはリソースをレンダリングしています: /faces/sites/mySite.jsf の実際の場所サーバー上のページ。

ここで情報を見つけることができますhttp://ocpsoft.org/prettyfaces/

方法 2: SO での BalusC の提案として

PrettyFaces は JSF 専用です。Rewrite が必要です(これはまだベータ版です。最近ではTuckey の URLRewriteFilterが最適です) 。

于 2012-12-28T05:00:42.370 に答える
0

オプション 1:-httd サービスを使用している場合は、mod_rewrite オプションを使用して URL パターンを変更できます http://httpd.apache.org/docs/current/mod/mod_rewrite.html

オプション 2:-

jubinPatel が言ったように、 UrlRewriteFilter は URL パターンを変更するための最良のオプションです。

http://tuckey.org/urlrewrite/

于 2012-12-30T14:27:55.867 に答える