0

JSF 2.1 トムキャット 7.0

これは依存性注入の間違った使い方ですか?

ページを移動しても問題なく動作します。しかし、「うまくいく」と「正しい」は同じではありません。

このパターンを検索目的にも使用します。リクエストがあり、それを使用して同じページにテーブルを作成したいと思っています。これは可能ですか?

index.xhtml

<?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>
        <link rel="SHORTCUT ICON" href= "resources/img/onlyT.ico"></link>
        <title>title</title>
        <h:outputStylesheet library="css" name="compass.css"/>
    </h:head>
    <h:body>
        Login system
        <br />

        <h:form>
            User : <h:inputText value="#{user.username}" />
            Password : <h:inputSecret value="#{user.password}" />
            <h:commandButton action="#{loginBean.performLogin()}" value="Submit" />
            <h:commandButton value="reset" type="reset" />
            <h:commandButton value="ChangePsW" action="changePassword"></h:commandButton>
        </h:form>

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

    </h:body>
</html>

LoginBan.java

@ManagedBean
@RequestScoped
public class LoginBean {


    @ManagedProperty(value="#{user}")
    private UserBean userBean;

    //must povide the setter method
    public void setUserBean(UserBean userBean) {
        this.userBean = userBean;
    }

    public LoginBean() {}


    public String performLogin(){


        //Mi connetto al db
        if(userBean.getUsername().equalsIgnoreCase( "mario")){

        //effettuo i controlli per stabilire se esiste l'utente

        userBean.setRoles("-EE-E-E-E-E-E");
        return "/mainPortal/mainPortal";
        }
        return "/mainPortal/index";

    }
}

UserBean.java

@ManagedBean (name="user")
@SessionScoped 
public class UserBean implements Serializable  {

private String Username;
private String Password;
private String Roles;

/** Creates a new instance of UserBean */
public UserBean() {
}


/**
 * @return the Username
 */
public String getUsername() {
    return Username;
}


/**
 * @param Username the Username to set
 */
public void setUsername( String Username ) {
    this.Username = Username;
}


/**
 * @return the Password
 */
public String getPassword() {
    return Password;
}


/**
 * @return the Roles
 */
public String getRoles() {
    return Roles;
}


/**
 * @param Roles the Roles to set
 */
public void setRoles( String Roles ) {
    this.Roles = Roles;
}


/**
 * @param Password the Password to set
 */
public void setPassword( String Password ) {
    this.Password = Password;
}

パスワードの変更もuserBeanを使用し、彼のchangePasswordBeanを持っています。

4

1 に答える 1

1

JSF 2 では、マネージド Beanを他のマネージドBean に注入できます。これは、実際に注入している Bean のスコープによってのみ制限されます。これは、実際に存在する Bean のスコープよりも大きくする必要があります。つまり、Bean を 1 つに注入できますが@SessionScoped@ViewScoped他の方法では注入できません。あなたがその慣習に従っているとき、私はあなたがそれをうまくやっていると思います.

一般に、アプリケーションは、現在のユーザーの入力/出力を処理するための または Bean と、セッションまたはアプリケーションの手段のためのより広い範囲の Bean によって構成される必要があり@ViewScopedます@RequestScoped。そのため、ユーザーがログインするとき、セッション コンテキストでデータを維持することをお勧めします。 .

最後に、検索リクエストに関する質問ですが、ページに検索入力を実装し、検索に応じて結果テーブルを動的にロードできると思います。ページ全体をリロードすることなく、ajax を使用して取得するだけです。すべてを Bean に実装できますが@ViewScoped、Bean の動作を維持したい場合は、リスナー メソッドでナビゲーション結果を返さないように注意してください。

于 2013-02-10T22:28:29.683 に答える