0

私は私のケースから始めます:

JSF2.1

トムキャット 7.0.27

IDEとしてのNetbeans

JSF および PRIMEFace (ただしオプション)

レベル JSF 初心者

レベルJAVAは良いものであり、神ではありません


JSFの操作方法を学ぶために、簡単なJSFサイトを作成しました。私の質問は、このステップでのログインの例に基づいています。問題は、明らかに不安定なログインに関連していません。

ちょっとしたコード:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author 
 */
@ManagedBean
@SessionScoped
//@RequestScoped
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private final String userName = "User";
private final String userPassword = "12345";
private String name;
private String password;
private boolean isLogged=false;


public String getName() {
    return name;
}


public void setName( String name ) {
    this.name = name;
}


public String getPassword() {
    return password;
}


public void setPassword( String password ) {
    this.password = password;
}


public String login() {
    if( !(userName==null || password==null)
        &&
        (userName.equals( name ) && userPassword.equals( password ))) {

        isLogged=false;
        return "main";
    } else {
        isLogged=true;
        return "index";
    }



}

public boolean getIsLogged(){
    return isLogged;
}
}

ページ インデックス

   <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html">
        <h:head>
            <title>TSAM 7.5 Login</title>
        </h:head>
        <h:body>
            Login system
            <br />
            <!--<h:link outcome="welcomePrimefaces" value="Primefaces welcome page" />-->
            <h:form>
                User : <h:inputText value="#{user.name}" />
                Password : <h:inputSecret value="#{user.password}" />
                <h:commandButton action="#{user.login()}" value="Submit" />
                <h:commandButton value="reset" type="reset" />
                <h:commandButton value="otherpage" action="otherpage"></h:commandButton>

            </h:form>
        </h:body>
    </html>

メインページ

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">

    <f:event type="preRenderView" listener="#{user.isLogged}"/> 
    <f:view contentType="text/html">
        <h:head>
            <f:facet name="first">
                <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
                <title>PrimeFaces</title>
            </f:facet>
        </h:head>

        <h:body>


            <p:layout fullPage="true">

                <p:layoutUnit position="north" size="100" resizable="true" closable="true" collapsible="true">
                    Header
                </p:layoutUnit>

                <p:layoutUnit position="south" size="100" closable="true" collapsible="true">
                    Footer
                </p:layoutUnit>

                <p:layoutUnit position="west" size="175" header="Left" collapsible="true">
                    <p:menu>
                        <p:submenu label="Resources">
                            <p:menuitem value="Demo" url="http://www.primefaces.org/showcase-labs/ui/home.jsf" />
                            <p:menuitem value="Documentation" url="http://www.primefaces.org/documentation.html" />
                            <p:menuitem value="Forum" url="http://forum.primefaces.org/" />
                            <p:menuitem value="Themes" url="http://www.primefaces.org/themes.html" />

                        </p:submenu>

                    </p:menu>
                </p:layoutUnit>

                <p:layoutUnit position="center">
                    Welcome to PrimeFaces
                </p:layoutUnit>

            </p:layout>

        </h:body>

    </f:view>
</html>

初め

action="#{user.login()}" を使用してナビゲーション アクションを作成しますが、これは正しいですか、それともより良いパターンがありますか?

しかし、本当の問題は次のとおりです。リダイレクトした場合にメッセージを表示するにはどうすればよいですか?

PrimeFace http://www.primefaces.org/showcase/ui/dialogLogin.jsfの例を知っているというメッセージを表示するのが好きです。しかし、リダイレクトも表示もされません。ただし、PrimeFace を使用せずに「プレーンな」JSW のみを使用する場合は、PrimeFaces に似ているので切り替えが簡単なので、 a を入れるのが好きです。

「パターン」を採用したいので、たとえば、検索を行ってデータが存在しない場合、または「データベースの消去」を呼び出してアプリケーションが進行中と言ってからすべての銀行口座がOKと言う場合に再利用できますesreased (ほんの一例!!でもメッセージが2つあるから面白い)。

ありがとう


私は試します

public String login() {
        if (!(userName == null || password == null)
            && (userName.equals( name ) && userPassword.equals( password ))) {

            isLogged = true;
            return "main";
        } else {
            isLogged = false;
            FacesMessage facesMsg;
            facesMsg = new FacesMessage( FacesMessage.SEVERITY_ERROR, "No login", "No login because username or passsword are incorrect etc" );
            FacesContext fc = FacesContext.getCurrentInstance();
            fc.addMessage( "loginError", facesMsg );
            return "index";
        }



    }

そして、ページを編集しました

<h:body>
        Login system
        <br />
        <!--<h:link outcome="welcomePrimefaces" value="Primefaces welcome page" />-->
        <h:form>
            User : <h:inputText value="#{user.name}" />
            Password : <h:inputSecret value="#{user.password}" />
            <h:commandButton action="#{user.login()}" value="Submit" />
            <h:commandButton value="reset" type="reset" />
            <h:commandButton value="Cambio Password" action="changePassword"></h:commandButton>


        </h:form>

        <h:message for="" style="color:red;margin:8px;"/>
    </h:body>

動作しますが、Bean に文字列を入れても問題ないため、問題ありません。そして、この文字列が豆によって生成されなければならない多言語が必要です....うーん、これは私が欠けているものではありません。

4

1 に答える 1

0

質問には非常に多くのノイズがあります。私はあなたの質問が最終的に次のようになることを理解しています:

Beanアクションメソッドでローカライズされた顔のメッセージを作成するにはどうすればよいですか?

その場合は、現在のリソースバンドルから自分でメッセージを取得してください。

ローカリゼーションについて話しているので、あなたは確かに次のようなものをすでに持っているはずです

<resource-bundle>
    <base-name>com.example.i18n.text</base-name>
    <var>text</var>
</resource-bundle>

あなたのfaces-config.xmlResourceBundleJSF自体が実際にカバーの下で使用している助けを借りて、Beanにそれを入れることもできます

Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
ResourceBundle text = ResourceBundle.getBundle("com.example.i18n.text", locale);

このようにして、メッセージを次のように作成できます。

String summary = text.getString("messages.no_login_summary");
String detail = text.getString("messages.no_login_detail");
new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail);
于 2012-11-23T12:35:29.670 に答える