Spring MVC - передача переменных с одной страницы на другую

Мне нужна помощь. Я работаю над проектом, где у меня есть несколько страниц и несколько форм; каждая страница имеет одну форму. Мне просто нужно иметь возможность передавать значения из одного JSP в другой. Что я должен делать?

Я новичок в Spring MVC. Я использую весну 2.5.6.

Вот мой дизайн:

formPage1.jsp - & gt; Контроллер1 - & gt; formPage2a.jsp - & gt; Контроллеру 2 требуется val из pg1 & amp; pg2a. formPage1.jsp - & gt; Контроллер1 - & gt; formPage2b.jsp - & gt; Контроллеру 3 требуется val из pg1 & amp; pg2b. formPage1.jsp - & gt; Контроллер1 - & gt; formPage2c.jsp - & gt; Контроллеру 4 требуется val из pg1 & amp; pg2c.

Как вы можете видеть выше, formPage1.jsp может загружать либо formPage2a, formPage2b или formPage2c. На основе входных данных, предоставленных в formPage1.jsp, он отправляется в контроллер (который является расширением SimpleFormController), и контроллер получает значения, введенные объектом user = command.

Я хочу иметь возможность использовать эти значения объекта команды либо в formPage2a, formPage2b или formPage2c, когда они передаются на другой контроллер.

вот текущий код:

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>
dispatcher 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>

Пожалуйста помоги!!

 Aravind Datta03 июн. 2012 г., 18:05
Вопрос в том, что .. Я не могу передать значения из первой страницы формы во вторую страницу формы. Я хочу знать, как это сделать.
 JB Nizet03 июн. 2012 г., 18:03
Что за вопрос
 Asif04 июн. 2012 г., 15:25
" нет никого, чтобы помочь мне, пожалуйста? ". Пожалуйста, будь добр, ты не платишь здесь никому, чтобы помочь тебе.

Ответы на вопрос(3)

Решение Вопроса

введенную пользователем на первой странице, либо используя скрытую переменную, как упомянуто выше JB Nizet. Или вы можете установить значение в атрибуте модели, которое будет возвращаться на ваших соответствующих контроллерах.

Псевдокод для тебя.

formPage1.jsp -> Controller1 -> установить значения в этой форме, извлекая ее из объекта Request -> formPage2a.jsp -> Controller2 будет иметь значения val из pg1 и pg2a.

Таким образом, нет необходимости поддерживать атрибут сеанса.

 Naveen K S04 июн. 2012 г., 16:32
Вам нужно взглянуть на свой Controller1.java. Вы возвращаете различные объекты модели в зависимости от некоторых условий. Вы должны сохранить их в этих модельных объектах. Некоторое время я не пользовался конфигурациями xml. Так что следите за своими решениями.
 Aravind Datta04 июн. 2012 г., 16:23
------------------ Inside Controller1.java: ------------------ String client = ((UserPreference) команда ) .getClient (); logger.info («Клиент, выбранный пользователем:» + клиент); GainLossRequest gainLossRequest = new GainLossRequest (userPreference); view = new ModelAndView ("redirect: /test/gainLossRequest.htm", "gainLossRequest", gainLossRequest); logger.info («Значение клиента внутри контроллера после назначения его объекту glRequest:» + gainLossRequest.getClient ());
 abehrens04 июн. 2012 г., 16:50
Вы используете редирект: на ваш взгляд, это приведет к тому, что ваш запрос потеряет какие-либо сведения об объекте домена. JSP не будет знать, чем заполнить ваш скрытый ввод, потому что экземпляр объекта не будет доступен на странице.
 Aravind Datta04 июн. 2012 г., 16:22
Хорошо спасибо. Это то, что я делаю внутри Controller1.java. Я хочу знать, "как установить значения во 2-й форме" ?? Этот код помогает установить значения в форме? Или это неправильно ?? Объект команды в 2nd.jsp - это GainLossRequest. Я устанавливаю значения, полученные из 1st.jsp для этого объекта ..., чтобы я мог получить их в 2nd.jsp. Но когда я пытаюсь сделать .. <c: out value = "$ {gainLossRequest.client}" />, ничего не отображается.
 Aravind Datta04 июн. 2012 г., 17:05
Хмм хорошо. Это очень полезно. Спасибо. Я думаю, что я медленно добираюсь туда ... но еще не совсем там. Причина, по которой мне пришлось перенаправить сообщение, заключается в том, что я хочу отобразить разные URL на разные bean-компоненты. По сути, основываясь на «клиенте», которого выбирает пользователь, я хочу перевести его на разные страницы. Эта строка помогла мне достичь этого - <bean name = "/ test / gainLossRequest.htm" class = "chimeraweb.web.SimpleGainLossController">. Так что, если я избавлюсь от этого префикса redirect: тогда я не смогу загружать страницы на основе ввода. Или, может быть, это то, что я знаю. Любые входы?

траницах) для хранения того, что пользователь ввел в первую форму. Таким образом, все поля, включая поля с первой страницы, будут отправлены со второй формой.

 Aravind Datta03 июн. 2012 г., 18:29
Я пытался. Это не сработало. Я изменил код, как это в 2-й JSP. <tr> <td> Client: </ td> <td> <form: hidden path = "client" /> </ td> </ tr>
 Aravind Datta04 июн. 2012 г., 15:07
Я прошу прощения. Я думал, что я достаточно ясно. Я вставил весь код в отношении этих двух страниц JSP и контроллера между ними. Проблема в том, что пользователь вводит значение на странице 1, и я хочу зафиксировать его на странице 2. Я не могу этого сделать. Я добавил отсутствующий файл конфигурации DispatcherServlet. Вам нужно больше информации
 Aravind Datta03 июн. 2012 г., 18:09
Спасибо за быстрый ответ. Действительно ценю это. Но я не знаю, как передать переменные как скрытые. Вы знаете синтаксис?
 JB Nizet04 июн. 2012 г., 12:06
Невозможно помочь тебе больше, если единственный симптом - «это не работает». Будь точнее. Скажите нам, что он делает и что должен делать. Покажите нам свой код. Дайте нам следы стека исключений. «Это не работает» ничего не значит. Когда вы идете к врачу, вы не просто говорите: «Я болен». Вы говорите ему, что у вас болит голова, что вас тошнит и т. Д.

public ModelAndView handleRequest(HttpServletRequest request){
      request.getSession().getAttribute("nameOfAttribute");
}

Прошу прощения за написание этого как аннотированного контроллера, я не помню, если бы контроллеры конфигурации xml предлагали эту функцию ...

Для этого не используется Spring-код. Другой вариант - использовать аннотацию @SessionAttribute на вашем контроллере:

@Controller 
@SessionAttributes("nameOfAttribute")
public class MyController{
//your session attribute can be accessed in controller methods using @ModelAttribute
public ModelAndView handleRequest(@ModelAttribute("nameOfAttribute")){
      session.getAttribute("nameOfAttribute");
}

Заметк

Вам нужно будет очистить атрибут сеанса, когда вы закончите с ним:

request.getSession().setAttribute("nameOfAttribute", null);
 abehrens04 июн. 2012 г., 16:12
Да, я хочу сказать, что вы можете сохранить объект, над которым работаете, в сеансе пользователя. Таким образом, нет необходимости помещать скрытые данные со всеми данными в нем. Вместо того, чтобы передавать переменные в jsp, поместите любой объект домена, который вы строите, в объект Session. Я считаю, что в Spring 2.5 есть многошаговый контроллер или контроллер-мастер, который вы также можете использовать для этого.
 Aravind Datta04 июн. 2012 г., 15:41
Я могу получить доступ к введенным пользователем значениям на первой странице JSP. Спасибо. Я не совсем понял. Пожалуйста, скажите мне, если это предположение неверно. step1: пользователь вводит значения в 1-й jsp step2: значения переходят в controller1.java step3: мне нужно иметь возможность получить те же значения во 2-й jsp step4: передавать то же значение в controller2.java. Я успешен с step1 и step2. Таким образом, получение введенных пользователем значений в controller1 не является проблемой. Я хочу как-то передать эти значения на controller2.java (шаг 4). но я понимаю, что не могу добраться до шага 4, не перейдя к шагу 3. Имеет ли это смысл

Ваш ответ на вопрос