2012-02-08 4 views
0

보기를 생성하기 위해 호출 된 컨트롤러와 컨트롤러를 알기를 원합니다. 이것이 내가에 액세스 할 수 있도록하려면 된 .js에 ... A가 이후의 .js,Spring MVC : 컨트롤러 + 액션 이름을보기에 전달하는 가장 좋은 방법은 무엇입니까?

<script src="/public/script.js"></script> 

을 포함에,

<script> 
    var controller = "${controllerName}"; 
    var controllerAction = "${controllerAction}"; 
</script> 

과 : 사실, 내가보기에 이런 일을하고 싶지 두 변수 :

if(controller == "UserController" && controllerAction == "Edit") 
{ 
    // ... 
} 
else 
{ 
    // ... 
} 

내 질문 : 컨트롤러 및 동작 이름을보기에 자동으로 전달하는 가장 좋은 방법은 무엇입니까?

내 컨트롤러는 추상적 인 "BaseController"를 확장하므로 ModelAttribute에 해당 변수를 추가하는 가장 좋은 장소가있을 것입니다. 나는 구체적인 변수를 추가하기 위해 아무 것도 할 수 없도록 콘크리트 컨트롤러를 선호한다. 그러나 어떻게 부모 컨트롤러가 자식 컨트롤러의 이름과 동작 이름을 알 수 있습니까?

당신이 제안하는 더 나은 솔루션이 있나요 ... 내가 BaseController의 스택 트레이스를 확인할 수 있습니다,하지만 난이 솔루션별로 좋아하지 않아요?

답변

-1

URL에서이 정보를 얻을 수없는 이유는 무엇입니까? 일반적으로 url은 Spring의 컨트롤러와 액션에 매핑됩니다. 자바 스크립트에서 왜이 정보를 얻기 위해 URL을 구문 분석하지 않습니까? 포스트, get 또는 헤더 정보에 따라 액션이 다르다면 url에 매개 변수로 추가 할 수 있습니다.

+0

해결 방법으로 답을 표시합니다. 감사합니다. 대부분의 경우, URL 구문 분석은 실제로 트릭을 수행합니다! 또한 인터셉터와 Spring 3.1을 사용하여 자동으로 두 변수를 전달하는 방법을 발견했습니다 (아래 "솔루션"참조). – electrotype

4

해결책을 찾았습니다.

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> 
    <property name="interceptors"> 
     <bean id="baseInterceptor" class="xxx.xxx.xxx.BaseInterceptor" /> 
    </property> 
</bean> 

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> 

그리고 BaseInterceptor의 postHandle에서

() 메소드에서, "개체 처리기는"내가 필요로하는 모든 정보를 포함하는 HandlerMethod 예,됩니다 :

봄 3.1을 사용하여, 나는 그 콩을 사용! 그런 다음이 정보를 ModelAndView 객체에 추가하기 만하면됩니다.

public class BaseInterceptor extends HandlerInterceptorAdapter 
{ 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception 
    { 
     HandlerMethod handlerMethod = (HandlerMethod)handler; 

     modelAndView.addObject("controllerName", handlerMethod.getBean().getClass().getName()); 
     modelAndView.addObject("controllerAction", handlerMethod.getMethod().getName()); 
    } 
} 
+0

공유해 주셔서 감사합니다. 이것은 아마도 응용 프로그램이해야 할 수도있는 로깅을 수행하는 좋은 방법 일 것입니다. 나는 이것에 대한 몇 가지 용도를 생각할 수있다! – Ali

관련 문제