У меня есть немного странная проблема с управляемым сеансовым компонентом. Я новичок в jsf, и это выглядит странно. Дело в следующем: loginBean хранит некоторые переменные, которые инициализируются после успешного входа в систему. Вначале они инициализируются, но после успешного входа пользователь перенаправляется на страницу profile.xhtml, в которой я вызываю эти переменные из loginBean. На этой странице переменные из loginBean равны нулю. Поэтому я теряю все данные после перенаправления.Sessioncoped управляемый bean-компонент, не сохраняющий переменные jsf
loginBean:
package beans;
import facades.ContactFacade;
import facades.UsersFacade;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import model.Contact;
@ManagedBean(name="loginBean")
@SessionScoped
public class LoginBean implements Serializable{
@EJB
private ContactFacade contactFacade;
@EJB
private UsersFacade usersFacade;
private String Name;
private String Password;
private int ContactID;
private Contact contact;
public LoginBean() {
}
public Contact getContact() {
return contact;
}
public void setContact(Contact contact) {
this.contact = contact;
}
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 int getContactID() {
return ContactID;
}
public void setContactID(int ContactID) {
this.ContactID = ContactID;
}
private boolean checkValidity(){
return (
(getName()!=null&&getName().length()>0)
&&(getPassword()!=null&&getPassword().length()>0))
?true:false;
}
public String login(){
if(checkValidity()&&usersFacade.tryLogin(getName(), getPassword())){
setContactID(usersFacade.getContactID(getName()));
getContactInstance();
return "profile.xhtml?faces-redirect=true";
}else{
return "loginError.xhtml?faces-redirect=true";
}
}
private void getContactInstance(){
setContact(contact);
this.contact=contactFacade.getContact(getContactID());
}
public String getDepartment(){
return contactFacade.getDepartmentName(getContact().getDepartment());
}
}
profile.xhtml JSF
<h:form>
<h2>My information</h2>
<h:panelGrid columns="2">
<h:outputLabel value="Name:"/>
<h:outputLabel value="#{loginBean.contact.name}"/>
<h:outputLabel value="Lastname:"/>
<h:outputLabel value="#{loginBean.contact.lastname}"/>
<h:outputLabel value="Address:"/>
<h:outputLabel value="#{loginBean.contact.address}"/>
<h:outputLabel value="Telephone:"/>
<h:outputLabel value="#{loginBean.contact.telephone}"/>
<h:outputLabel value="Email:"/>
<h:outputLabel value="#{loginBean.contact.email}"/>
<h:outputLabel value="Department:"/>
<h:outputLabel value="#{loginBean.department}"/>
<h:commandButton id="btnChange" value="Change Info" />
</h:panelGrid>
</h:form>
Это довольно странно для меня. Может ли кто-нибудь помочь? Заранее спасибо
Да, действительно. Я не переопределял faces-config, но я изменил тип компонента (ранее созданный в качестве запроса, я новичок), а в лицевой конфигурации область по-прежнему была как запрос. Спасибо что подметил это. –
У меня есть аналогичная проблема с другим bean-компонентом. У меня есть регистрационная форма, значения входного поля которой не хранятся в компоненте. Я попытался добавить его теперь в face-config как новый элемент, но все тот же вопрос. Любой отзыв? –