2011-08-23 72 views
0

是否有可能在Spring控制器上爲我們的註釋在外部屬性文件中定義內容?使用屬性文件的Spring MVC控制器映射

假設我有以下控制器

@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" /> 

它會是不錯的這些PARAMS外在,這樣我們只需要定義一次在屬性文件中。這樣,如果我們需要更改JSP中的提交按鈕上的標籤,我們只需要在屬性文件中更改它,而不是在兩個地方。

這可能嗎?

回答

3

註釋參數值需要是文字或引用常量字段,因此外部化動態值不能注入到@RequestMapping註釋中。另一種方法是使用映射到文字(SAVEMODEL/REFRESH)的其他一些隱藏表單變量來驅動行爲,而不是顯示給用戶的文本(​​您可能需要將在某個點顯示給用戶的文本國際化然後這個模型會破壞)

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個視圖。那就是全部