복붙노트

[SPRING] 뷰 레이어에서 spring mvc 컨트롤러의 URL을 찾을 수 있습니까?

SPRING

뷰 레이어에서 spring mvc 컨트롤러의 URL을 찾을 수 있습니까?

나는 장고에서 역 URL 해결이라고 불리는 것을 필요로한다고 생각한다. 내가 이런 식으로가는 AddUserController 있다고하자 :

@Controller
@RequestMapping("/create-user")
public class AddUserController{ ... }

내가 원하는 것은이 컨트롤러에 URL을 동적으로 찾거나보기 (JSP)에서 매개 변수가있는 URL을 구성하는 몇 가지 방법입니다. 그래서 컨트롤러 전체에 URL을 하드 코딩 할 필요가 없습니다. Spring MVC에서도 가능합니까?

해결법

  1. ==============================

    1.필요로하는 모든 컨트롤러 URL을 HashMap에 집계 한 Bean을 가지고 있고 컨트롤러 / URL 맵을 필요로하는 모든 모델에 추가하는 것이 고려 되었습니까? 각 Spring 컨트롤러는 init () 메서드를 호출 할 수있는 기능을 가지고 있습니다. 컨트롤러가 살아있을 때 사용할 수 있도록 init () 메서드의 컨트롤러 / URL 맵에 각 컨트롤러에 이름과 URL을 추가하게 할 수 있습니다.

    필요로하는 모든 컨트롤러 URL을 HashMap에 집계 한 Bean을 가지고 있고 컨트롤러 / URL 맵을 필요로하는 모든 모델에 추가하는 것이 고려 되었습니까? 각 Spring 컨트롤러는 init () 메서드를 호출 할 수있는 기능을 가지고 있습니다. 컨트롤러가 살아있을 때 사용할 수 있도록 init () 메서드의 컨트롤러 / URL 맵에 각 컨트롤러에 이름과 URL을 추가하게 할 수 있습니다.

  2. ==============================

    2.Java Reflection API로 해결할 수 있습니다. 사용자 정의 태그 라이브러리 생성. 메소드는 다음과 같습니다.

    Java Reflection API로 해결할 수 있습니다. 사용자 정의 태그 라이브러리 생성. 메소드는 다음과 같습니다.

    Class c = Class.forName("Your Controller");
    
                for(Method m :c.getMethods()){
                    if(m.getName()=="Your Method"){
                        Annotation cc = m.getAnnotation(RequestMapping.class);
                        RequestMapping rm = (RequestMapping)cc;
                        for(String s:rm.value()){
                            System.out.println(s);
                        }
                    }
                }
    

    당신이 마주 칠 수있는 가능한 문제는

    1.Path 변수> this / pet / show / {id}와 마찬가지로 경로 이름과 값을 설정해야 return URL 앞에 String.replace ()를 대체해야합니다.

    2. 메소드 재정의> 하나의 메소드 만 문제가되지 않습니다. if 메소드 override 당신이 정말로 원했던 Parameter Type의 지원 시퀀스를 제공 할 필요가있다. Method.getParametersType ()

    3.Multiple URL to Single Method> @RequestMapping (value = { "/", "welcome"}). 그래서 쉬운 규칙은 첫 번째 규칙을 선택합니다.

    스타일 URL과 같은 4.Ant> 이처럼 * .do는 마지막에 예를 들어 스타일과 같은 개미를 배치하여 여러 URL을 사용하는 것입니다. @RequestMapping (값 = { "/ 애완 동물", "/ 애완 동물 / *. 할"})

    그래서 가능한 링크 태그 스타일은

    <my:link controller="com.sample.web.PetController" method="show" params="java.lang.Integer">
    <my:path name="id" value="1" />
    </my:link>
    

    여기서 parmas 속성은 메소드 오버라이드가없는 경우 선택 사항입니다.

    나는 약간의 문제에 대해 생각하기 위해 떠났다. :)

  3. ==============================

    3.JSP로 객체를 수동으로 연결하거나 관리 할 필요없이 모든 JSP 파일에서 요청 객체에 액세스 할 수 있습니다. 그래서 당신은 요청 객체로부터 URL 경로를 얻을 수 있고, JSP 암묵 객체로 google을 가질 수 있습니다.

    JSP로 객체를 수동으로 연결하거나 관리 할 필요없이 모든 JSP 파일에서 요청 객체에 액세스 할 수 있습니다. 그래서 당신은 요청 객체로부터 URL 경로를 얻을 수 있고, JSP 암묵 객체로 google을 가질 수 있습니다.

    http://www.exforsys.com/tutorials/jsp/jsp-implicit-and-session-objects.html을 시작할 수있는 페이지가 있습니다.

  4. ==============================

    4.적절한 일치를 찾기 위해 사용하고있는 주석을 검사하는 taglib을 만들려고합니다.

    적절한 일치를 찾기 위해 사용하고있는 주석을 검사하는 taglib을 만들려고합니다.

    <x:url controller="myController">
        <x:param name="action" value="myAction"/>
    </x:url>
    

    Taglib 코드는 대략 비슷할 수 있습니다.

    그것은 당신의 특정한 경우 (@RequestMapping 스타일)에서 작동 할 수도 있지만, 여러 매핑이있을 때 약간 털이 나올 가능성이 있습니다. 아마도 사용자 정의 주석을 사용하면 쉽게 만들 수 있습니다.

    편집하다:

    가장 많이 사용하는 DefaultAnnotationHandlerMapping에 의해 상속받은 AbstractUrlHandlerMapping :: getHandlerMap은 Handler에 대한 URL 맵을 반환합니다.

    그래서 당신은 적합한 경기를 찾는 것을 반복 할 수 있습니다. "적합한 경기"는 당신이 원하는 모든 것입니다.

  5. ==============================

    5.나는 5 월에이를 위해 개선 요청서를 제출했다. 다음을 따르거나 / 투표 / 코멘트 할 수 있습니다 : http://jira.springsource.org/browse/SPR-5779

    나는 5 월에이를 위해 개선 요청서를 제출했다. 다음을 따르거나 / 투표 / 코멘트 할 수 있습니다 : http://jira.springsource.org/browse/SPR-5779

  6. ==============================

    6.이 문제는 모든 경로가 등록되고 주문되는 중앙 집중식 라우터가 SpringMVC에 없다는 것입니다. 그런 다음 역방향 라우팅은 정적 프로세스가 아니며보기 계층의 경로 결정을 통합하기가 어려울 수 있습니다.

    이 문제는 모든 경로가 등록되고 주문되는 중앙 집중식 라우터가 SpringMVC에 없다는 것입니다. 그런 다음 역방향 라우팅은 정적 프로세스가 아니며보기 계층의 경로 결정을 통합하기가 어려울 수 있습니다.

    이 프로젝트에서 레일과 같은 중앙 집중식 라우터를 확인하고 뷰 레이어에서 역방향 라우팅을 확인하십시오.

  7. ==============================

    7.Spring HATEOAS 라이브러리를 사용하면 컨트롤러에 링크 할 수 있습니다.

    Spring HATEOAS 라이브러리를 사용하면 컨트롤러에 링크 할 수 있습니다.

    오랫동안 나는 CGLib 프록시를 사용하여 이와 같은 것을 구현하려고 생각했지만 너무 게을 렀다. Spring HATEOS 라이브러리는 프록시 방식과 다양한 다른 방법을 가능하게합니다.

  8. from https://stackoverflow.com/questions/1082759/can-i-find-the-url-for-a-spring-mvc-controller-in-the-view-layer by cc-by-sa and MIT license