1

Tomcat 6にmojara EL 2.2を搭載したJSF 2.0があり、開発中にしばらくの間動作していました。最近、アクション doLogin でマネージド Bean のユーザー名とパスワードをチェックするログイン用のコマンド ボタン (基本的なもの) を含むフォームを追加しました。

public String doLogin(){
    FacesMessage message = null;
    if((username.equals("user"))&&(password.equals("pass")))
        return "testpage.xhtml";
    else
        message = new FacesMessage("Invalid username or password");

    FacesContext.getCurrentInstance().addMessage(null, message);

    return null;
}

問題は、doLogin を通過して「testpage.xhtml」を返した後、同じページが表示されることです。WebContent のルートにすべての xhtml ファイルがありますが。

Tomcat のコンソールで次のように表示されます。

JSF の ELResolver が JSP コンテナに登録されていませんでした。

EL 2.2 を使用したパラメーターの受け渡しは正常に機能します。

FaceletsでJSFを使用しています。

4

3 に答える 3

0

わかりません。B'coz 別のコードが表示されません。

faces-config.xml で特定のナビゲーション ルールを設定していない場合。

$SUB-DIRECTORY1/testpage.xhtml のデフォルトは $SUB-DIRECTORY1/testpage です

于 2012-05-24T16:21:47.080 に答える
0

暗黙的なナビゲーションは JSF 2.0 以降で導入されました。古い JSF 1.x では、in を定義するか、URL を明示的に呼び出す必要があり<navigation-rule>ましたfaces-config.xmlExternalContext#redirect()

この問題は、JSF 2.0 Web アプリケーションが JSF 1.x フォールバック方式で実行されていることを示しています。faces-config.xmlJSF 2.0 仕様バージョンに準拠していると宣言されていることを確認してください。

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

    <!-- Config here. -->

</faces-config>

EL リゾルバーの警告は、これとは無関係です。これは、Tomcat 6 で Glassfish の EL 2.2 を使用することが原因であり、ページで EL を使用できません.jsp(Facelets のみを使用している場合は問題になりません)。この警告を取り除きたい場合は、Glassfish EL の代わりにJBoss ELを使用してください。JBoss EL は強化された EL 2.1 実装ですが、Glassfish EL は EL 2.2 実装です。

于 2012-05-24T16:17:00.497 に答える
0

JSF 2.0 testpage ビューでは、暗黙的なナビゲーションに変換されます。ここのようにコードを変更してください。

    public String doLogin(){
       FacesMessage message = null;
       if((username.equals("user"))&&(password.equals("pass"))) {
            return "testpage";
       } else {
            message = new FacesMessage("Invalid username or password");
            FacesContext.getCurrentInstance().addMessage(null, message);
       }
    return null;
}
于 2012-05-29T04:54:32.887 に答える