微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 使用Thymeleaf和Spring MVC,Form参数为null

我遇到了Thymeleaf和Spring MVC的问题.

我正在关注spring.io网站http://spring.io/guides/gs/handling-form-submission/的教程,当我试图扩展本教程时,我遇到了一个问题.

如果我在模型类中添加一个参数(在我的例子中,我添加一个Date参数和一个long参数),而不是将它们放在我的视图上(想象一下这个日期参数是我的最后修改日期和这个长参数是一个随机值),当我提交这个值时,它会使我的方法中的这2个参数为null.

这是我的一些代码.

我的模特班

public class Greeting {

    private long id;
    private String content;
    private Date hour;
    private long longNumber;
.... getters and setters ....
}

我的控制器

@Controller
public class GreetingController {

@RequestMapping(value="/greeting",method=RequestMethod.GET)
public String greetingForm(Model model) {

    Greeting greeting = new Greeting();
    greeting.setHour(new Date());
    greeting.setLongNumber(1234L);
    System.out.println(greeting.toString());
    model.addAttribute("greeting",greeting);
    return "greeting";
}

@RequestMapping(value="/greeting",method=RequestMethod.POST)
public String greetingSubmit(@modelattribute Greeting greeting,Model model) {
    System.out.println(greeting.toString());
    model.addAttribute("greeting",greeting);
    return "result";
}
}

我的表格

Meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

结果页面

Meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

这是我的模型类的控制台打印

Greeting [id=0,content=null,hour=Sun Apr 26 22:29:25 GMT-03:00 2015,longNumber=1234]
Greeting [id=0,content=aaaa,hour=null,longNumber=0]

如您所见,我的视图中的两个参数在帖子(第二行)之后变为空,在第一行之后,它们具有值.我不明白为什么,因为我来自另一个好的框架(JSF),我没有那样的问题.只是要知道,我正在使用spring 4,就像在教程中一样,为什么我有一个不在我视图中的参数?因为这些参数中的一些将保存一些数据,就像上次寄存器更新日期一样,最后一位用户更新了寄存器和我的应用程序ID.

任何人都可以帮我找到答案吗?

编辑:

经过一段时间和实验,我找到了解决问题的方法.按照我的代码片段,它的工作原理如下:

@Controller
@SessionAttributes({"obj"})
public class MyController {

    @RequestMapping(value = "/path",method = RequestMethod.GET)
    public ModelAndView myGet() {       
        ModelAndView modelAndView = new ModelAndView("view");
        MyClass object = new MyClass();
        modelAndView.addobject("obj",object );     
        return modelAndView;
    }

    @RequestMapping(value = "/path",method = RequestMethod.POST)
    public ModelAndView myPost(@modelattribute("obj") @Validated MyClass object,BindingResult result){

        ModelAndView modelAndView = new ModelAndView("view");       
        if(result.hasErrors())
            modelAndView.addobject("obj",object);
        else 
            service.save(object);
        return modelAndView;
    }   
}
最佳答案
这是预期的行为.在获取问候视图时,您在响应中有模型,但只要完成http请求/响应,它就不再存在.您将保留< form>中的值.标签,您需要在表单提交时提供这些值.

这意味着,如果要将这些值发回,则需要添加2个隐藏输入来保存这两个值.

原文地址:https://www.jb51.cc/spring/431552.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐