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

2

Мне нужна помощь. Я работаю над проектом, где у меня есть несколько страниц и несколько форм; каждая страница имеет одну форму. Мне просто нужно иметь возможность передавать значения из одного 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>

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

" нет никого, чтобы помочь мне, пожалуйста? ". Пожалуйста, будь добр, ты не платишь здесь никому, чтобы помочь тебе. Asif
Вопрос в том, что .. Я не могу передать значения из первой страницы формы во вторую страницу формы. Я хочу знать, как это сделать. Aravind Datta
Что за вопрос JB Nizet

Ваш Ответ

3   ответа
2

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

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

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

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

Хорошо спасибо. Это то, что я делаю внутри Controller1.java. Я хочу знать, "как установить значения во 2-й форме" ?? Этот код помогает установить значения в форме? Или это неправильно ?? Объект команды в 2nd.jsp - это GainLossRequest. Я устанавливаю значения, полученные из 1st.jsp для этого объекта ..., чтобы я мог получить их в 2nd.jsp. Но когда я пытаюсь сделать .. <c: out value = "$ {gainLossRequest.client}" />, ничего не отображается. Aravind Datta
------------------ 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 ()); Aravind Datta
Вам нужно взглянуть на свой Controller1.java. Вы возвращаете различные объекты модели в зависимости от некоторых условий. Вы должны сохранить их в этих модельных объектах. Некоторое время я не пользовался конфигурациями xml. Так что следите за своими решениями. Naveen K S
Хмм хорошо. Это очень полезно. Спасибо. Я думаю, что я медленно добираюсь туда ... но еще не совсем там. Причина, по которой мне пришлось перенаправить сообщение, заключается в том, что я хочу отобразить разные URL на разные bean-компоненты. По сути, основываясь на «клиенте», которого выбирает пользователь, я хочу перевести его на разные страницы. Эта строка помогла мне достичь этого - <bean name = "/ test / gainLossRequest.htm" class = "chimeraweb.web.SimpleGainLossController">. Так что, если я избавлюсь от этого префикса redirect: тогда я не смогу загружать страницы на основе ввода. Или, может быть, это то, что я знаю. Любые входы? Aravind Datta
Вы используете редирект: на ваш взгляд, это приведет к тому, что ваш запрос потеряет какие-либо сведения об объекте домена. JSP не будет знать, чем заполнить ваш скрытый ввод, потому что экземпляр объекта не будет доступен на странице. abehrens
6

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);
Да, я хочу сказать, что вы можете сохранить объект, над которым работаете, в сеансе пользователя. Таким образом, нет необходимости помещать скрытые данные со всеми данными в нем. Вместо того, чтобы передавать переменные в jsp, поместите любой объект домена, который вы строите, в объект Session. Я считаю, что в Spring 2.5 есть многошаговый контроллер или контроллер-мастер, который вы также можете использовать для этого. abehrens
Я могу получить доступ к введенным пользователем значениям на первой странице JSP. Спасибо. Я не совсем понял. Пожалуйста, скажите мне, если это предположение неверно. step1: пользователь вводит значения в 1-й jsp step2: значения переходят в controller1.java step3: мне нужно иметь возможность получить те же значения во 2-й jsp step4: передавать то же значение в controller2.java. Я успешен с step1 и step2. Таким образом, получение введенных пользователем значений в controller1 не является проблемой. Я хочу как-то передать эти значения на controller2.java (шаг 4). но я понимаю, что не могу добраться до шага 4, не перейдя к шагу 3. Имеет ли это смысл Aravind Datta
1

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

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

Похожие вопросы