2011-03-23 2 views
1

J'ai un objet domaine que je présente sur un formulaire type. Voici un exemple simplifié:Printemps MVC - champs de suppression

public class Name implements Keyed { 

    private String firstName; 
    private String middleName; 
    private String lastName; 
    private Number key; 

    //Getters and Setters 
} 

Disons que j'ai deux types d'utilisateurs qui peuvent chacun modifier ces objets Nom. Pour une raison stupide, un groupe n'est pas autorisé à voir/éditer les noms de famille des utilisateurs. Donc, je laisse ce champ hors du formulaire (pas de champ caché non plus).

Y a-t-il un moyen d'empêcher Spring de supprimer ce champ de deuxième prénom? Je pourrais créer un nouvel objet pour cela, mais cela ressemble à une duplication qui ne devrait pas être nécessaire.

Existe-t-il un moyen de conserver des données qui n'ont pas été modifiées (c'est-à-dire qu'elles n'ont pas été affichées à l'utilisateur et n'ont donc pas pu être modifiées)?

Répondre

0

Il semble que cela ne soit simplement pas possible avec la fixation par ressort. Vous êtes essentiellement obligé de créer une copie proche de votre objet de domaine et de supprimer les champs qui ne doivent pas être affichés sur la page elle-même. Bien que ce soit malheureux, c'est simplement la façon dont fonctionne la reliure de printemps, car une nouvelle instance sera créée au printemps pour vous avant que votre méthode ne soit invoquée.

0

Vous pouvez probablement stocker le deuxième prénom sur la session (pour les utilisateurs en lecture seule) et le récupérer lors de la soumission du formulaire.

+0

Bien que ce soit vrai, il s'agit d'un exemple simplifié. La pièce sur laquelle je travaille est un objet avec une composition profonde. Par exemple, je pourrais choisir de ne pas afficher le deuxième prénom. Cependant, j'ai vraiment affaire à un objet Personne, qui a une date de naissance, une adresse e-mail, une adresse physique, etc ... Je dois ensuite choisir ce qu'il faut placer sur la session, et lors de la soumission suivante, réinitialiser tous ceux les champs qui n'étaient pas affichés (ce qui pourrait être compliqué). – Scott