0

JSF2でユーザー認証を作成していますが、すべてのページに表示されるヘッダーには次のものが含まれています。

<c:if test="#{user.loggedIn}">
    <li><h:link value="Log out" outcome="#{user.logout}"/></li>
</c:if>

UserはuserBeanを参照し、logout()は単にセッションを無効にし、ログインページへのリダイレクトを発行します。したがって、ユーザーがログインすると、user.loggedInがtrueになり、ログアウトリンクが表示されますが、どういうわけかすぐに呼び出され、ユーザーはすぐにログアウトされます。

なぜこれが起こっているのか誰かが知っていますか?h:commandLinkを使うことを考えましたが、フォームが必要で、避けようとしています。

編集: 間違ったコードをコピーしました...ユーザーがログインできない理由を理解するために1時間費やした後、運が良かったです。以前のリビジョンを見て、誤ってコピーされたコードを確認できます。

4

2 に答える 2

4

これは、JSFタグがそのように認識および解析されず、すべてのEL式が値式として評価されるプレーンテキストとして効果的にレンダリングされる場合に発生する可能性があります。あなたの場合、基本的にの戻り値を出力し#{user.logout()}ます。しかし、ELがそれを行う間、メソッドのロジックはもちろん呼び出されます。

属性を削除しactionてブラウザでページを開き、[ソースの表示]を実行すると、生成されたHTML要素の代わりに解析されていない<h:commandLink>タグが表示されます。<a>

h:ビューファイルのルートタグの正しいURIでXML名前空間が定義されていることを確認してください。

xmlns:h="http://java.sun.com/jsf/html"


更新<h:link>Beanアクションを呼び出すことは意図されていません。これは、純粋なGETリンクとして意図されています。仕様ごとに、メソッド式ではなく値式として評価されますoutcome。は、リンクが移動する必要があるビューIDを表す必要があります。ELがメソッドを値式として評価すると、もちろんすぐに呼び出されます。リダイレクトと組み合わせて使用​​し続けてください。追加の利点は、これがブックマーク可能でも検索ボットクロール可能でもないことです。outcome<h:commandLink>

于 2012-05-23T16:50:30.647 に答える
-1

これはjsfToolboxの例です。

<h:commandLink id="link1" 
               value="#{bundle.checkoutLabel}" 
               action="#{shoppingCartBean.checkout}" />

ログアウトの最後にあなたの親を取り除きます。

于 2012-05-23T16:47:43.027 に答える