我正在使用JSF創建一個Timesheet應用程序,目前正在處理登錄部分。這是一個直接登錄,需要登錄ID和密碼,並檢查它是否是有效的組合(儘管此時我只是在管理員登錄)。JSF在調用操作方法之前沒有更新值
我的問題似乎是JSF沒有更新我的loginID和密碼字段之前調用驗證操作方法,因爲當我點擊登錄時,它會引發NullPointerException。這是我的驗證方法。
/**
* 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和密碼進入用戶和checkPassword字段,然後它的工作原理沒有問題。所以我認爲問題是loginID和密碼字段爲空(因爲getLoginID()和getPassword()只是返回這些字段的常規舊getter)。我知道答案會很愚蠢,我會因爲錯過而感到尷尬,但在這一點上,我正在將我的頭靠在牆上。
只要信息完整,loginID和password字段就位於User類(提供了合適的setter)中,而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;
}
}
你能分享你的用戶類代碼嗎?由於用戶字段沒有填充可能是缺少的東西。 – sanjay
新增用戶類別代碼。 – user1265215