有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Spring MVC中java在两个页面上保持状态

我有一个Spring MVC 3应用程序,其中有两个页面。单页用户选择一些数据,并将其发布到控制器和buildsup第2页。然后在第2页得到它的值之后,我想使用第一页的值来执行数据库操作

到目前为止我已经尝试过的事情:

我看了看ModelAttribute

首先是第一个控制员的职位:

@RequestMapping(value = "/firstPage")
public ModelAndView firstPageSubmit(String valuePage1, String valuePage2) {
     return new ModelAndView("secondPage", "readonlySettings", new ReadonlySettings( valuePage1, valuePage2 );
} 

我希望春天能保存好这个东西,然后再给我:

@RequestMapping(value = "/secondPage")
public ModelAndView secondPage(@ModelAttribute("readonlySettings") ReadonlySettings settings, String valuePage2) {
     //Store stuff in the database
     doa.save(settings.getValuePage1(), settings.getValuePage2(), valuePage2);
} 

但是没有骰子。。所有的值都是空的

顺便说一句:我没有对jsp本身上的ReadonlySettings对象做任何处理。所以没有隐藏字段或其他什么,因为我不喜欢这个解决方案。人们可以改变隐藏的领域,这是我真正希望避免的事情

有人知道怎么处理吗


共 (1) 个答案

  1. # 1 楼答案

    通过使用@SessionAttributes,您可以告诉Spring在服务器端保留与用户web会话相关联的对象

    @Controller
    @SessionAttributes("readonlySettings")
    public class MyController {
    
    @RequestMapping(value = "/firstPage")
    public ModelAndView firstPageSubmit(String valuePage1, String valuePage2, ModelMap map) {
        map.addAttribute("readonlySettings", new ReadonlySettings( valuePage1, valuePage2 );
        return new ModelAndView("secondPage");
    } 
    
    @RequestMapping(value = "/secondPage")
    public ModelAndView secondPage(ModelMap map, SessionStatus status, String valuePage2, ) {
        ReadonlySettings settings = map.getAttribute("readonlySettings");
        doa.save(settings.getValuePage1(), settings.getValuePage2(), valuePage2);
        status.setComplete();
    } 
    

    显然这是相当原始的。根据操作的上下文,当有人通过链接直接加载第二个页面,并且会话中没有对象时,可能需要添加处理。此外,如果有人从未完成第二步,则在清理会话之前,对象将一直挂在那里。(如果只有两条线,则可以接受。)如果您的实际用例比这复杂得多,那么您可能希望查看web flow之类的东西,而不是重新发明