Spring MVC — перенос одного и того же объекта с одной страницы на другую

В моем приложении Spring MVC у меня есть 2 страницы.
У меня есть объект с 10 переменными. На первой странице я устанавливаю 9 переменных вышеуказанного объекта (на первой странице 9 полей). Я установил этот объект в сеансе, а также атрибут модели в контроллере. Мне также нужно передать этот же объект на следующую страницу. На второй странице мне нужно установить 10-ю переменную в том же объекте (вторая страница имеет только одно поле 10-е поле). (почему мне нужна вторая страница для установки 10-й переменной: на второй странице я заполняю раскрывающийся список на основе записей на первой странице)

Когда я отправляю форму на второй странице, мне нужно отправить тот же объект с 10 переменными. (Я не мог вставить код из-за политики моей компании) Кто-нибудь может помочь мне исправить это?


person user1514499    schedule 30.10.2013    source источник
comment
comment
Я уже пробовал по ссылке выше. но не повезло. это другой сценарий. пожалуйста, внимательно прочитайте содержание.   -  person user1514499    schedule 30.10.2013
comment
если возможно выложите код страниц и методы контроллера.   -  person Debojit Saikia    schedule 30.10.2013


Ответы (4)


Обратите внимание, что оба метода находятся в одном контроллере. Вам нужно сделать что-то вроде этого:

@Controller
@SessionAttributes("myObject")
public class SessionAttributesController {

    // Save session attribute in model. 
    @RequestMapping(value = "/page1.html", method = RequestMethod.GET)
    public String page1( @ModelAttribute MyClass myObject, ModelMap model ) {
        model.addtAttribute("myObject", myObject);
        return "page1.html";
    }

    // Now you model is having myObject, so it has to be used in jsp. You can add ModelMap parameter to this method and check what contains model in debug mode.   
    @RequestMapping(value = "/page2.html", method = RequestMethod.GET)
    public String page(ModelMap model) {
          model.get("myObject").setAttr10(value);   
          return "page2.html";
    }

}
person mvb13    schedule 30.10.2013

Это можно сделать таким образом:

@Controller
public class PageController {
    @RequestMapping("/page1")
    public String showPage1(Model model) {
        Obj obj = new Obj();
        model.addAttribute("obj", obj);
        return "test/page1";
    }

    @RequestMapping("/page2")
    public String showPage2(@ModelAttribute Obj obj, Model model) {
        model.addAttribute("obj", obj);
        return "test/page2";
    }

    @RequestMapping("/page3")
    public String showPage3(@ModelAttribute Obj obj, Model model) {
        model.addAttribute("obj", obj);
        return "test/page3";
    }
}

Страница 1 (только соответствующая часть):

<sf:form modelAttribute="obj" action="page2">
<sf:input path="field1"/><br/>
<sf:input path="field2"/><br/>
<sf:input path="field3"/><br/>
<input type="submit" value="To page 2">
</sf:form>

Страница 2:

<sf:form modelAttribute="obj" action="page3">
<sf:hidden path="field1"/>
<sf:hidden path="field2"/>
<sf:hidden path="field3"/>
<sf:input path="field4"/><br/>
<sf:input path="field5"/><br/>
<input type="submit" value="To page 3">
</sf:form>

Страница 3 служит только для отображения всех полей объекта, которые были введены на предыдущих 2 страницах.

person maxnx    schedule 13.11.2013

Если вы думаете, что у вас будут экраны типа мастера, вам следует рассмотреть возможность использования spring-webflow. DSL Spring-Webflow поможет вам справиться с более сложными сценариями, если они возникнут.

Основные сведения о Spring-Webflow можно получить здесь.

person vasanth    schedule 18.11.2013

Если вы рассмотрели все другие параметры (я имею в виду атрибут модели и т. д.), я бы предложил использовать Spring-Web-Flow для этого (если две страницы, о которых вы говорите, были связаны), таким образом вы можете гарантировать, что данные будут переданы с одной страницы на другую.

Ссылка: http://docs.spring.io/spring-webflow/docs/1.0.3/reference/practical.html

Надеюсь, это сработает.

С уважением Ашок Гудисе Полезно Бесполезно

person Ashok Gudise    schedule 18.11.2013