Spring MVC - passer des variables d'une page à l'autre
J'ai besoin d'aide. Je suis en train de travailler sur un projet dans lequel j'ai plusieurs pages et les formes multiples; chaque page a une forme. J'ai juste besoin d'être en mesure de transmettre des valeurs à partir d'une page jsp à l'autre. Que dois-je faire?
Je suis nouveau sur Spring MVC. Je suis à l'aide de printemps 2.5.6.
Voici mon dessin:
formPage1.jsp --> Controller1 --> formPage2a.jsp --> Controller2 besoins val frm pg1 & pg2a.
formPage1.jsp --> Controller1 --> formPage2b.jsp --> Controller3 besoins val frm pg1 & pg2b.
formPage1.jsp --> Controller1 --> formPage2c.jsp --> Controller4 besoins val frm pg1 & pg2c.
Comme vous pouvez le voir ci-dessus, formPage1.jsp peut charger soit formPage2a, formPage2b ou formPage2c. Sur la base d'informations fournies dans formPage1.jsp, il va pour le contrôleur (qui est une extension de SimpleFormController) et contrôleur de récupérer les valeurs saisies par l'utilisateur = objet de commande.
Je veux être en mesure d'utiliser ces commandes des valeurs de l'objet en soit formPage2a, formPage2b ou formPage2c lorsqu'ils sont soumis à un autre contrôleur.
voici le code actuel:
formPage1.jsp:
<form:form method="post" commandName="gainLossRequest">
<form:errors path="*" cssClass="error"/>
<table>
<tr>
<td>
<table>
<tr>
<td><h4>Choose Client</h4></td>
<td style="font-size: medium; font-family: Arial, bold; color: red">*</td>
</tr>
</table>
</td>
<td>
<form:select path="client">
<form:option value="none" label="Select" />
<form:option value="abc" label="abc" />
<form:option value="def" label="def" />
<form:option value="xyz" label="xyz" />
</form:select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="reset" value="Reset" />
<input type="submit" value="Next" />
</td>
</tr>
</table>
</form:form>
Controller1.java
public class TestController extends SimpleFormController {
/** Logger for this class and subclasses */
protected final Log logger = LogFactory.getLog(getClass());
public TestController() {
logger.info("entering TestController.constructor..");
setCommandClass(UserPreference.class);
setCommandName("userPreference");
}
public ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws ServletException {
logger.info("entering TestController.onSubmit all..");
UserPreference userPreference = (UserPreference) command;
ModelAndView view = null;
if ("abc".equals(userPreference.getClient())) {
GainLossRequest gainLossRequest = new GainLossRequest(userPreference);
view = new ModelAndView("redirect:/test/gainLossRequest.htm",
"gainLossRequest", gainLossRequest);
} else if ("def".equals(userPreference.getClient())) {
IncomingPositionsRequest incomingPositionsRequest = new IncomingPositionsRequest();
view = new ModelAndView(
"redirect:/test/incomingPositionsRequest.htm",
"incomingPositionsRequest", incomingPositionsRequest);
} else if ("xyz".equals(userPreference
.getClient())) {
TaxStrategyRequest taxStrategyRequest = new TaxStrategyRequest();
view = new ModelAndView("redirect:/test/taxStrategyRequest.htm",
"taxStrategyRequest", taxStrategyRequest);
}
}
}
formPage2a.jsp
<form:form method="post" commandName="gainLossRequest">
<form:errors path="*" cssClass="error"/>
<table style="width: 60%">
<tr>
<td>Account Number (s):</td>
<td style="font-size: medium; font-family: Arial, bold; color: red">*</td>
</tr>
<tr>
<td>
User Chosen Client:
</td>
<td>
<c:out value="${gainLossRequest.client}"/>
</td>
</tr>
<tr colspan="2">
<td>
<input type="reset" value="Reset" />
<input type="submit" value="Submit" />
</td>
</tr>
répartiteur servlet config
<!-- setupNew.jsp is the first jsp -->
<bean name="/test/setupNew.htm" class="chimeraweb.web.TestController">
<property name="sessionForm" value="true"/>
<property name="commandName" value="userPreference"/>
<property name="commandClass" value="chimeraweb.service.UserPreference"/>
<property name="validator">
<bean class="chimeraweb.service.UserPreferenceValidator"/>
</property>
<property name="formView" value="/test/setupNew"/>
</bean>
<!-- gainLossRequest.jsp is the 2nd jsp where I want to display the values captured in the first jsp page -->
<bean name="/test/gainLossRequest.htm" class="chimeraweb.web.SimpleGainLossController">
<property name="sessionForm" value="true"/>
<property name="commandName" value="gainLossRequest"/>
<property name="commandClass" value="chimeraweb.service.GainLossRequest"/>
<property name="validator">
<bean class="chimeraweb.service.GainLossValidator"/>
</property>
<property name="formView" value="/test/gainLossRequest"/>
</bean>
S'il vous plaît aider!!
La question est.. je suis incapable de transmettre des valeurs à partir de la première formPage à la 2ème formPage. Je veux savoir comment le faire.
"il n'y a personne pour m'aider s'il vous plaît?". S'il vous plaît essayer d'être gentil, vous ne payez pas ici quelqu'un pour vous aider.
OriginalL'auteur Aravind Datta | 2012-06-03
Vous devez vous connecter pour publier un commentaire.
Vous devez persister que l'utilisateur a entré des informations sur la première page, soit à l'aide d'une variable cachée comme mentionné ci-dessus par JB Nizet. Ou vous pouvez définir la valeur de l'attribut du modèle qui sera retourné à votre correspondant contrôleurs.
Le pseudo-code pour vous.
formPage1.jsp --> Controller1 --> définir les valeurs dans ce formulaire, de le récupérer à partir de l'objet de la Requête --> formPage2a.jsp --> Controller2 auront val frm deux pg1 & pg2a.
De cette façon, il n'est pas nécessaire de maintenir un attribut de session.
------------------ À l'intérieur de Controller1.java: ------------------ Chaîne de client = ((UserPreference) de commande).getClient(); logger.info("Utilisateur de choisir un client:" + client); GainLossRequest gainLossRequest = new GainLossRequest(userPreference); view = new ModelAndView("redirect:/test/gainLossRequest.htm", "gainLossRequest", gainLossRequest); logger.info("la Valeur du client à l'intérieur du contrôleur après l'affectation à glRequest objet:" + gainLossRequest.getClient());
Vous avez besoin de regarder votre Controller1.java. Vous êtes de retour de modèles différents objets en fonction de certaines conditions. Vous avez besoin de les avoir persisté dans ces objets de modèle. Je n'ai pas utilisé les configurations xml pour un certain temps.. Donc utiliser votre jugement sur ce qui doit être fait.
Vous utilisez une redirection: à votre avis, qui sera la cause de votre demande à perdre de toute connaissance de l'objet du domaine. La jsp ne saurez quoi remplir votre cachés d'entrée, parce que l'instance de l'objet ne sera pas disponible dans la page.
Hmm.. ok. C'est très utile. Merci. Je pense que je suis en train d'y arriver.. mais pas tout à fait encore là. La raison que j'avais de redirection est 'cus je veux la carte des Url différentes pour différentes fèves. Fondamentalement, basé sur le "client" que l'utilisateur choisit, j'ai envie de l'emmener à différentes pages. Cette ligne m'a aidé à atteindre cet -- <bean name="/test/gainLossRequest.htm" class="chimeraweb.web.SimpleGainLossController">. Donc, si je me débarrasser de cette redirection:préfixe, alors, je ne vais pas être en mesure de charger les pages basées sur entrée. Ou peut-être, c'est ce que je sais. Toutes les entrées?
OriginalL'auteur Naveen K S
Vous pouvez également utiliser les attributs de session, soit manuellement, tels que:
Excuses pour écrire ce que annotée contrôleur, je ne me souviens pas si xml de config contrôleurs offrent cette fonctionnalité...
Il n'y a pas de Ressort de code qu'. L'autre option est d'utiliser le @SessionAttribute annotation sur votre contrôleur:
Note
Vous aurez besoin d'effacer l'attribut de session lorsque vous avez terminé avec elle:
Oui, ce que je veux dire, c'est que vous pouvez stocker l'objet que vous travaillez dans la session de l'utilisateur. De cette façon, il n'est pas nécessaire de mettre caché entrées avec toutes les données. Au lieu de passer des variables à la page jsp, ce domaine objets en cours de création dans l'objet Session. Je crois que le Printemps de 2,5 a un multistepaction contrôleur ou de l'assistant contrôleur, vous pourriez utiliser pour ce faire, trop.
OriginalL'auteur abehrens
La façon la plus simple est d'utiliser les champs cachés dans la deuxième page(s) pour stocker ce que l'utilisateur a enetered dans la première forme. De cette façon, tous les champs, y compris ceux de la première page, sera soumis à la deuxième forme(s).
static.springsource.org/spring/docs/2.0.x/reference/...
J'ai essayé. Il n'a pas de travail. J'ai modifié le code comme ceci dans la 2e jsp. <tr> <td> Client: </td> <td> <form:hidden path="client" /> </td> </tr>
Il est impossible de vous aider plus si le seul symptôme est "ça ne fonctionne pas". Être plus précis. Dites-nous ce qu'il fait et ce qu'il doit faire. Montre-nous ton code. Nous donner l'exception des traces de pile. "Ça ne marche pas" ne veut rien dire. Quand vous allez à un médecin, vous ne vous contentez pas de dire: "je suis malade". Vous lui dites que votre tête me fait mal, que vous vomissez, etc.
Je suis désolé. Je pensais que j'ai été assez clair. J'ai collé tout le code en ce qui concerne ces deux pages jsp et le contrôleur entre les deux. Le problème est que l'utilisateur entre une valeur dans la page 1 et je veux saisir que dans page2. Je ne suis pas en mesure de le faire. J'ai ajouté la DispatcherServlet fichier de config qui manquait. Avez-vous besoin de plus d'infos?
OriginalL'auteur JB Nizet