0

私は JSF を使用してタイムシート アプリケーションを作成しており、現在ログイン部分に取り組んでいます。これは、ログイン ID とパスワードを取り、それが有効な組み合わせであるかどうかをチェックする簡単なログインです (ただし、この時点では管理者ログインに取り組んでいます)。

私の問題は、ログインをクリックするとNullPointerExceptionがスローされるため、検証アクションメソッドを呼び出す前にJSFがログインIDとパスワードフィールドを更新していないようです。これが私の検証方法です。

/**
 * Verifies that the loginID and password is the super user combination.
 * @return true if it is, false if it is not.
 */
public String verifyUser() {
    ResourceBundle login = getSuperUserLogin();
    String user = getLoginID();
    String checkPassword = getPassword();
    if(!login.containsKey(user) || !checkPassword.equals(login.getString(user))) {
        return "regular";
    }
    return "super";
}

そして私のログインページ

<body>
    <div class = "content" align = "center">
        <h:form>
            <h3>#{msgs.loginTitle}</h3>
            <h:panelGrid columns="2" cellpadding = "4">
                    <h:outputText value = "#{msgs.userID}" styleClass="title" />
                    <h:inputText value="#{user.loginID}" styleClass="rounded"  />
                    <h:outputText value = "#{msgs.password}" styleClass="title" />
                    <h:inputSecret value="#{user.password}" styleClass="rounded" />
             </h:panelGrid>
             <p><h:commandButton value="#{msgs.login}" styleClass="button" action="#{superUser.verifyUser}"/></p>
          </h:form>
      </div>

ログイン ID とパスワードを user フィールドと checkPassword フィールドにハードコードすると、問題なく動作します。したがって、loginID および password フィールドが null であることが問題であると考えています (getLoginID() および getPassword() は、これらのフィールドを返す通常の古い getter に過ぎないため)。答えがばかげたものになることはわかっていますし、それを見逃すと恥ずかしい思いをすることになると思いますが、この時点で頭を壁にぶつけています。

情報が完成するように、loginID フィールドと password フィールドは User クラスに配置され (適切なセッターが提供されます)、verifyUser メソッドはサブクラス SuperUser に配置されます。なぜこれが問題になるのかはわかりませんが、これはスーパークラスとサブクラスを使用する初めての JSF アプリケーションになるため、わかりません。

編集: リクエストに応じて、ここに私のユーザークラスコードがあります

package ca.bcit.infosys.timesheet.model;
import java.util.ResourceBundle;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;

@Named
@ApplicationScoped
public class User implements java.io.Serializable {
/** The user's name */
private String name;
/** The user's employee number */
private int empNumber;
/** The user's login ID */
private String loginID;
/** The user's password */
private String password;
/** Is the user currently in an editable state (i.e. the user's information can be edited on the webpage) */
private boolean editable;
private ResourceBundle superUserLogin = ResourceBundle.getBundle("ca.bcit.infosys.timesheet.model.messages");

/**
 * @return the name
 */
public String getName() {
    return name;
}

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

/**
 * @return the empNumber
 */
public int getEmpNumber() {
    return empNumber;
}

/**
 * @param empNumber the empNumber to set
 */
public void setEmpNumber(int empNumber) {
    this.empNumber = empNumber;
}

/**
 * @return the loginID
 */
public String getLoginID() {
    return loginID;
}

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

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

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

/**
 * @return the isEditable
 */
public boolean isEditable() {
    return editable;
}

/**
 * @param isEditable the isEditable to set
 */
public void setEditable(boolean editable) {
    this.editable = editable;
}

/**
 * @return the Property containing the super user login information.
 */
public ResourceBundle getSuperUserLogin() {
    return superUserLogin;
}

}

4

1 に答える 1