2017-05-09 2 views
0
ist

ich folgendes haben:aktualisiert JSF Modell funktioniert nicht

Ausblick:

<h:form class="form-signin"> 

<h:inputText id="name" name="name" value="#{userCabinetController.user.name}" required="true" requiredMessage="Поле имя не заполнено" class="form-control" type="name"/> 

<h:inputText id="email" name="email" value="#{userCabinetController.user.email}" required="true" requiredMessage="Введите логин (email)" class="form-control" type="email"/> 

<h:inputSecret id="password" name="password" value="#{userCabinetController.user.password}" required="true" requiredMessage="Введите пароль" class="form-control" type="password"/> 

<h:commandButton action="#{userCabinetController.updateUser}" value="Изменить данные" class="btn btn-lg btn-primary btn-block"/> 

</h:form> 

Controller:

@Named 
@ViewScoped 
public class UserCabinetController { 

@PostConstruct 
public void init() { 
    /** 
    * get user instance for further updating 
    */ 
    ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 
    Map<String, Object> sessionMap = externalContext.getSessionMap(); 
    User userFromSession = (User) sessionMap.get("user"); 
    int userId = userFromSession.getId(); 
    user = userFacade.finById(userId); 
} 

private User user; 

@Inject 
UserFacade userFacade; 

public void updateUser() { 
    System.out.println(user); 
    userFacade.updateUser(user); 
} 

// getters/setters 
public User getUser() { 
    return user; 
} 

public void setUser(User user) { 
    this.user = user; 
} 
} 

und Fassade:

@ApplicationScoped 
public class UserFacadeImpl implements UserFacade, Serializable{ 

    @PersistenceContext 
    private EntityManager em; 

@Transactional 
    public void updateUser(User user) { 
     em.merge(user); 
    } 
    } 

Aber wenn ich versuche, um die Benutzerinstanz zu aktualisieren gibt es dieselbe, d.h. die alte Instanz, ohne neue Werte zu geben.

Wie Benutzerinstanz aktualisieren? Was ist falsch?

+1

wenn Sie Ajax nicht verwenden, wird die Anfrage Umfang genug für den Controller. Melden Sie sich in der Init-Methode an, um zu sehen. Ob es eine neue Controller-Instanz erstellt? (Welches Paket importieren Sie aus der Annotation RequestScoped?) –

+0

Welche Version von jsf verwenden Sie? Bitte beachten Sie http://inceptetechnologies.blogspot.in/2013/05/jsf22-viewscope-using-cdi.html?m=1 für Versionsprobleme mit Viewscoped – OTM

Antwort

0

Die UserFacadeImpl.updateUser() sollten die aktualisierte Benutzerobjekt an die Steuerung übergeben zurück:

@Named 
@ViewScoped 
public class UserCabinetController { 

    public void updateUser() { 
    System.out.println(user); 
    user = userFacade.updateUser(user); 
    } 
} 

@ApplicationScoped 
public class UserFacadeImpl implements UserFacade, Serializable { 

public User updateUser(User user) { 
     user = em.merge(user); 
     return user; 
    } 
} 
+0

Eigentlich. Es hat nicht funktioniert. Das Problem besteht darin, dass im Controller vor dem Aktualisieren der Instanz System.out.println (user); gibt die gleichen Werte. Scheint, dass mit View und Controller etwas nicht stimmt und neue Werte nicht an den Controller weitergegeben werden. – ILya