Spring MVC - 将同一个对象从一个页面传输到另一个页面

时间:2013-10-30 05:01:17

标签: java spring session spring-mvc spring-form

在我的Spring MVC应用程序中,我有2页 我有一个包含10个变量的对象。 在第一页中,我设置了上述对象的9个变量(第一页有9个字段)。 我在session中设置了这个对象以及控制器中的model属性。 我还需要将同一个对象传递给下一页。 在第二页中,我需要在同一个对象中设置第10个变量(第二个页面只有一个字段的第10个字段)。 (为什么我需要第二页来设置第10个变量是 - 在第二页中,我根据第一页中的条目填充下拉列表)

当我在第二页中提交表单时 - 我需要使用10个变量提交相同的对象。 (由于我的公司政策,我无法粘贴代码) 任何人都可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:0)

请注意,两种方法都在同一个控制器中。你需要做这样的事情:

@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";
    }

}

答案 1 :(得分:0)

这可以通过这种方式完成:

@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页上输入的所有对象字段。

答案 2 :(得分:0)

如果您认为自己拥有这些向导类型屏幕,则应考虑使用spring-webflow。 Spring-Webflow的DSL将帮助您管理更复杂的场景。

您可以从here获得有关Spring-Webflow的基本介绍。

答案 3 :(得分:0)

如果您考虑过所有其他选项(我的意思是模型属性等), 我建议使用Spring-Web-Flow来执行此操作(如果您正在讨论的两个页面相关),这样您就可以确保将数据从一个页面传输到另一个页面。

价: http://docs.spring.io/spring-webflow/docs/1.0.3/reference/practical.html

希望这有效。

此致 Ashok Gudise