Reputation: 1139
I encountered a problem when I was deploying my Login.xhtml. I keep getting null values for my userName and passWord values even though I have use the userManagerBean.userName and userManagerBean.passWord to store the values input by the user.
Any help?
My codes are below.
Thanks! :)
Login.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://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h:outputText value="Username: " />
<p:inputText value="#{userManagerBean.userName}" />
<br></br>
<h:outputText value="Password: " />
<p:password value="#{userManagerBean.passWord}" />
<br></br>
<p:commandButton value="Login" id="ajax">
<p:ajax update="status" listener="#{userManagerBean.loginResult()}" />
</p:commandButton>
<br></br>
<h:outputText id="status" value="#{userManagerBean.loginStatus}" />
</h:form>
</h:body>
</html>
UserManagerBean.java
package managedbean;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.event.ActionEvent;
import javax.inject.Named;
import session.stateless.SystemUserSession;
@Named(value = "userManagerBean")
@RequestScoped
public class UserManagerBean {
@EJB
private SystemUserSession systemUser;
private String userName;
private String passWord;
private String eventNameLength;
private String loginStatus;
/**
* @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;
}
/**
* @param passWord the passWord to set
*/
public void setPassWord(String passWord) {
this.passWord = passWord;
}
/**
* @return the eventNameLength
*/
public String getEventNameLength() {
return eventNameLength;
}
/**
* @param eventNameLength the eventNameLength to set
*/
public void setEventNameLength(String eventNameLength) {
this.eventNameLength = eventNameLength;
}
public void buttonAction(ActionEvent actionEvent) {
System.out.println("Welcome to Primefaces!!");
}
public String loginResult()
{
System.out.println(userName +" "+passWord);
if(systemUser.getSystemUser(userName,passWord) == null)
{
System.out.println("No user found");
System.out.println(userName +" "+passWord);
loginStatus = "No user found";
return "No user found";
}
else
{
System.out.println("Successful login");
loginStatus = "Successful login";
return "Successful login";
}
}
/**
* @return the loginStatus
*/
public String getLoginStatus() {
return loginStatus;
}
/**
* @param loginStatus the loginStatus to set
*/
public void setLoginStatus(String loginStatus) {
this.loginStatus = loginStatus;
}
}
SystemUserSession.java
package session.stateless;
import entity.SystemUser;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@Stateless
@LocalBean
public class SystemUserSession {
@PersistenceContext
private EntityManager entityManager;
public SystemUser getSystemUser(String userName, String passWord) {
Query query = entityManager.createQuery("SELECT u FROM SystemUser u WHERE u.userName = :inUserName AND u.password = :inPassWord");
query.setParameter("inUserName", userName);
query.setParameter("inPassWord", passWord);
SystemUser systemUser = null;
try {
systemUser = (SystemUser) query.getSingleResult();
} catch (NoResultException ex) {
//ex.printStackTrace();
}
return systemUser;
}
}
Upvotes: 0
Views: 4017
Reputation: 4345
p:ajax
defaults to processing @this
, which means that the values of the inputText
's will never be updated on the bean.
Besides, p:commandButton
has ajax capabilities by itself, and it even defaults to process="@form"
which is what you want.
So just change the button to
<p:commandButton value="Login"
id="ajax"
actionListener="#{userManagerBean.loginResult()}"
update="status">
</p:commandButton>
Besides I would make the bean @SessionScoped
, since you need to remember the loginStatus
for the whole session.
Upvotes: 2