2010-01-25 6 views
1

J'utilise SimpleFormController dans mon application pour gérer les sous-formulaires. une chose qui me manque est l'objet de requête qui est passé onSubmit(request,response..) est un différent de l'objet de demande initial qui est reçu par formBackingObject(..) .probablement parce qu'il s'agit d'une nouvelle demande du web.Printemps SimpleFormController onSubmit paramètres de demande

Je veux juste utiliser les mêmes paramètres de l'objet de demande dans onSubmit(..) que j'ai pu accéder à formBackingObject(..).

il pourrait être possible pour moi de les stocker et passer à travers des champs cachés de jsp, mais j'essaye d'obtenir une approche élégante.

est-il possible d'y parvenir?

EDIT:

je suis PRÉPONDÉRANTS

formBackingObject(HttpServletRequest request)` 

et

onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) 

méthodes dans ma classe.

pour la vue intial formbackingObject(..) sera appelé et je vais avoir quelques variables de l'objet de la demande alors si l'utilisateur soumet le formulaire onSubmit(..) sera appelé alors je vais avoir un autre objet de la requête qui est différent de celui que je reçu dans formbackingObject(..).

ce que je demande est, est-il possible de tenir la initiale « demande » paramètres (type request.getParameter() de ...) afin que je puisse les utiliser dans onSubmit(..) avec en les envoyant retour & arrière à travers des champs cachés?

+0

Utilisez un cadre? – Bear

+0

il utilise le printemps MVC. @sangram - donne plus de détails - ce qui se passe, quand, quelles sont vos pages, etc. – Bozho

+0

édité. Je veux utiliser les chaînes de paramètres dans onSubmit() que j'ai reçu quand on appelle formBacking(). J'ai les objets de requête dans à la fois formbacking et onsubmit. mais ils sont différents (get & post). Je vérifie juste s'il y a une manière plus simple de retenir les chaînes de paramètres de la requête initiale au lieu de les renvoyer à onSubmit() avec des champs cachés. –

Répondre

2

La méthode formBackingObject() est appelée lorsque l'utilisateur effectue la demande pour la vue de formulaire initiale. Ceci est une requête HTTP complètement distincte lorsque l'utilisateur soumet le formulaire qui est lorsque la méthode onSubmit() est appelée.

Si vous voulez enregistrer l'état de la première requête HTTP afin qu'il soit disponible dans la deuxième requête HTTP, vous devriez probablement l'enregistrer dans la session HTTP.

par exemple: dans votre méthode formBackingObject():

HttpSession session = request.getSession(); 
session.setAttribute("param1", request.getParameter("param1")); 
session.setAttribute("param2", request.getParameter("param2")); 

et dans votre méthode onSubmit():

HttpSession session = request.getSession(); 
String param1 = (String) session.getAttribute("param1"); 
String param2 = (String) session.getAttribute("param2"); 
+0

Merci Shane! c'est probablement le seul moyen car c'est une requête HTTP complètement nouvelle. –

1

formBackingObject() devrait mettre en place l'objet "de commande" qui est fourni à onSubmit() sur la prochaine soumission. La commande Object est juste un POJO que vous pouvez créer et ajouter des attributs si nécessaire.

Normalement, vous remplissez la commande Objet avec des données à afficher à l'écran à partir d'un appel de service (qui provient en dernier lieu de la base de données) mais rien ne vous empêche de placer les données dans formBackingObject() et en le retirant à nouveau lorsque onSubmit() est appelé. L'avantage de faire cela est que vous ne finissez pas avec cruft flottant dans votre session.

Par exemple, mettre un booléen de la demande MyCommand en formBackingObject():

protected Object formBackingObject(HttpServletRequest request) 
    { 
     boolean someBoolean = ServletRequestUtils.getBooleanParameter(request, "someBoolean"); 
     MyCommand myCommand = new MyCommand(); 
     myCommand.setSomeBoolean(someBoolean); 
     // optionally get some data from the DB to set on myCommand here... 
     return myCommand; 
    } 

Ensuite, trouver que booléen dans la demande onSubmit():

protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) 
    { 
     MyCommand myCommand = (MyCommand) command; 
     if (myCommand.getSomeBoolean()) { 
      System.out.println("someBoolean was set in formBackingObject!"); 
     } 
    } 

Notez que myCommand est visible à la session (donc aucun autre utilisateur connecté ne peut le voir, et il est détruit quand la session se termine).

Questions connexes