Spring MVC Web应用程序 - 正确使用Model

时间:2012-11-27 19:02:19

标签: java jsp spring-mvc

我正在使用Spring Framework在Java中开发Web应用程序。在一个页面上,我让用户选择年份。这是代码:

@Controller
public class MyController {

    @RequestMapping(value = "/pick_year", method = RequestMethod.GET)
    public String pickYear(Model model) {
        model.addAttribute("yearModel", new YearModel);
        return "pick_year";
    }

    @RequestMapping(value = "/open_close_month_list", method = RequestMethod.POST)
    public String processYear(Model model, @ModelAttribute("yearModel") YearModel yearModel) {
        int year = yearModel.getYear();
        // Processing
    }
}


public class YearModel { 
    private int year;

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }
}

这个实现有效,但是我想用一些更简单的方法来获取用户的年份。我认为制作一个特殊模型只是为了得到一个整数并不是很好的方法。

所以,我的问题是:是否有可能以某种方式简化此代码?

感谢您的帮助。 米兰

2 个答案:

答案 0 :(得分:4)

通常使用模型将数据从控制器传递到视图,并使用@RequestParam从控制器中提交的表单中获取数据。这意味着,您的POST方法如下所示:

public String processYear(@RequestParam("year") int year) {
    // Processing
}

答案 1 :(得分:1)

确实你只需要存储整数,你不需要创建一个全新的特殊类来保存它

@Controller
public class MyController {
    @RequestMapping(value = "/pick_year", method = RequestMethod.GET)
    public String pickYear(ModelMap model) {
        model.addAttribute("year", 2012);
        return "pick_year";
    }

    @RequestMapping(value = "/open_close_month_list", method = RequestMethod.POST)
    public String processYear(@ModelAttribute("year") int year) {
        // Processing
    }
}

您可以改为(如果可能的话)重新设计您的视图,以便您可以使用@RequestParam直接将整数传递给方法pickYear,将其渲染到视图中,以便可以传递此参数以同样的方式进入第二种方法processYear

@Controller
public class MyController {
    // In the pick_year view hold the model.year in any hidden form so that
    // it can get passed to the process year method
    @RequestMapping(value = "/pick_year", method = RequestMethod.GET)
    public ModelAndView pickYear(@RequestParam("year") int year) {
        ModelAndView model = new ModelAndView("pick_year");
        model.addAttribute("year", 2012);
        return model;
    }

    @RequestMapping(value = "/open_close_month_list", method = RequestMethod.POST)
    public String processYear(@RequestParam("year") int year) {
        // Processing
    }
}