【问题标题】:Spring MVC - Transferring the same object from one page to otherSpring MVC - 将相同的对象从一个页面传输到另一个页面
【发布时间】:2013-11-09 13:16:16
【问题描述】:

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

当我在第二页提交表单时 - 我需要提交具有 10 个变量的同一个对象。 (由于我的公司政策,我无法粘贴代码) 谁能帮我解决这个问题?

【问题讨论】:

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


【解决方案1】:

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

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

}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        希望这行得通。

        问候 阿肖克·古迪斯

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-01-24
          • 2011-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-19
          • 1970-01-01
          相关资源
          最近更新 更多