JSF meilleure Façon de passer des paramètres

je suis actuellement en train de travailler avec la JSF, mais depuis que je suis un vieux et grincheux php-dev j'ai toujours du mal avec le Paramètres d'une requête. (En PHP, vous pouvez accéder à la demande Paramerts quand vous le souhaitez, à l'aide de la $_GET["paramname"] Tableau.

Maintenant, je suis en train de travailler sur un Utilisateur de Gestion du Système. (CRUD) Habituellement, je aller avec une liste de tous les utilisateurs disponibles, les options ayant comme modifier /supprimer. Le lien modifier est alors pointant vers http:\\localhost\editUser.xhtml?userId=5 par exemple.

J'ai également un Contrôleur appelé UserEditController qui, fondamentalement, détient l'entité utilisateur et appelle la mise à jour.

Donc, à l'intérieur de ce Contrôleur, je suis en utilisant le @PostConstruct Annotation à la charge de l'utilisateur avec l'id 5 de l'instance DataService et de le stocker à l'intérieur d'une propriété.

Problème est ici: Wenn entrer PostConstruct-Méthode dans le APPLY_REQUEST_VALUES-Phase im pas en mesure d'accéder à la requête de Paramètre de la Carte de Visages Contexte (retournera null pour userId)

Contrôleur (simplifié):

@Named
@RequestScoped
UserEditController{


@Inject
private UserDataService userDataService;

private User currentUser;

@PostConstruct
public void initValues(){
    String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("userId");

    this.currentUser = userDataService.getUserById(id);
}

public String saveCurrentUser(){
    userDataService.updateUser(this.currentUser);
    return "userManagement"; //return to overview after saving
}

//getter and setter
}

Cela fonctionne comme intened. Les Champs sont maintenant liés à propriétés de l'utilisateur comme #{userEditController.currentUser.forename} etc.

J'ai maintenant ajouté un bouton "enregistrer" avec l'attribut action {userEditController.saveCurrentUser()}

Cependant le script puis pénètre dans la APPLY_REQUEST_VALUES-Phase Et le UserEditController de initValues est appelé à nouveau.

  • il en résulte un nullpointer Exception, lorsque vous essayez d'accéder à la RequestParameterMap
  • et, évidemment, je ne veux pas recharger l'utilisateur AVANT de l'enregistrer 🙂

Cela sonne comme une question stupide, mais je pense que je vais gâcher entre le PHP et le JSF-Style de gérer les choses.

Toute Aide serait appréciée.

InformationsquelleAutor dognose | 2012-11-13