Spring: настроить xml, чтобы контроллер возвращал представление в зависимости от параметра

1

У меня есть приложение на основе Spring MVC, и я хочу добавить функциональность, в которой некоторые из моих контроллеров возвратят один и тот же вид в зависимости от значения параметра.

@RequestMapping("/someView")
public String returnView(Model model, HttpServletRequest request, String param){
    if(param.equals("condition")){
        return "commonView";
    }

    // do stuff

    return "methodSpecificView";
}

Есть ли способ, в котором первое условие if может быть настроено в xml? Поскольку подобная функциональность должна реализовываться во многих контроллерах, и я не хочу писать шаблонный код, конфигурация xml может упростить задачу.

Кроме того, если первый возможен, можно ли его расширить, чтобы исключить параметр param из сигнатуры метода сопоставления запросов и поместить его в xml тоже?

Теги:
spring
spring-mvc

3 ответа

1

Весной 3.2, которая представляет собой аннотацию на основе приведенного ниже фрагмента кода, даст вам представление о вашей проблеме:

    @RequestMapping("formSubmit.htm")   
public String onformSubmit(@ModelAttribute("TestBean") TestBean testBean,BindingResult result, ModelMap model, HttpServletRequest request) {
    String _result  = null;
    if (!result.hasErrors()) {
            _result = performAction(request, dataStoreBean);//Method to perform action based on parameters recieved
        }
       if(testBean.getCondition()){
         _result = "commonView";
       }else{
        _result = "methodSpecificView";
      }     
        return _result; 

    }
 TestBean//Class to hold all the required setters and getters

Объяснение: по мере того, как запрос из вашего представления приходит к этому методу, ссылка ModelAttribute будет содержать все значения из представления, если условие получено из представления, чем вы можете напрямую получить его из атрибута модели и вернуть соответствующее представление. Если ваше условие получено после применения определенной логики, вы можете установить условие в testBean и снова получить его для возврата соответствующего представления.

1

Вы можете использовать @RequestMapping:

@RequestMapping(value = {"/someView", "/anotherView", ...}, params = "name=condition")
public String returnCommonView(){
    return "commonView";
}
0

Вы должны подумать об этом, используя AOP - Around что-то вроде ниже.

@Around("@annotation(RequestMapping)") // modify the condition to include / exclude specific methods
public Object aroundAdvice(ProceedingJoinPoint joinpoint) throws Throwable {

    Object args[] = joinpoint.getArgs();
    String param = args[2]; // change the index as per convenience
    if(param.equals("condition")){
       return "commonView";
    } else {
      return joinpoint.proceed(); // this will execute the annotated method
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню