使用属性文件的Spring MVC控制器映射

时间:2011-08-23 21:54:30

标签: java spring spring-mvc

是否可以在Spring Controllers上为我们的注释定义外部属性文件?

假设我有以下控制器

@Controller
@RequestMapping(value = "processModel.jsp")
public class ProcessorController {

    @RequestMapping(method = RequestMethod.GET)
    public String displayModel() {
         //Code to load processor
         return "processModel";
    }

    @RequestMapping(method = RequestMethod.POST, params="submit=Refresh")
    public String refreshModel() {
         //Code to refresh data
         return "processModel";
    }

    @RequestMapping(method = RequestMethod.POST, params="submit=Save Model")
    public String saveModel() {
        //Code to save model
        return "processModel";
    }
}

假设生成以下HTML:

<input type="submit" name="submit" value="Save Model" />
<input type="submit" name="submit" value="Refresh" />

将这些参数外部化是很好的,这样我们只需要在属性文件中定义它们一次。这样,如果我们需要在JSP中的提交按钮上更改标签,我们只需要在属性文件中更改它,而不是在两个地方。

这可能吗?

2 个答案:

答案 0 :(得分:3)

注释参数值必须是文字或引用常量字段,因此外部化的动态值不能注入@RequestMapping注释。另一种方法是使用映射到文字的一些其他隐藏形式变量(SAVEMODEL / REFRESH)而不是显示给用户的文本来驱动行为(您可能需要在某些时候将显示给用户的文本国际化而这个模型将会破裂)

答案 1 :(得分:0)

您也可以在控制器中创建一个modelAndView方法,而不必在控制器的头部放置@requestMapping。所以你的控制器会变成这样:

@Controller

公共类ProcessorController {

@RequestMapping(value="getView.html" method = RequestMethod.GET)
public ModelAndView displayModel(HttpServletRequest request) {
     ModelAndView mav = new ModelAndView();
     //Code to load processor
     mav.setViewName = "processModel";
     return mav;
}

@RequestMapping(value="refreshModel.html" method = RequestMethod.POST)
public ModelAndView refreshModel(HttpServletRequest request, HttpServletResponse response) {
     ModelAndView mav = new ModelAndView();
     //Code to refresh data
     mav.setViewName="refreshModel";
     return mav;
}

@RequestMapping(value="saveModel.html" method = RequestMethod.POST)
public String saveModel(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mav = new ModelAndView();

    //Code to save model
    mav.setViewName="saveModel";
    return mav;
}

}

之后,您只需要创建三个jsp文件(saveModel.jsp,refreshModel.jsp,processModel.jsp),并且在一个控制器中有3个视图。这就是全部