2012-08-03 3 views
0

내가 제출 한 경우이 예제에서 양식에서 하나 개의 매개 변수를 두 개의 스프링 MVC 작업이 있습니다스프링 MVC 입력 매개 변수 @RequestParam 문자열 requestedURL

public ModelAndView login(HttpServletResponse response, HttpServletRequest request, 
@RequestParam String requestedURL) 
나는 속성이 requestedURL가 참조 할 수 있는지 알고 싶습니다

실제로 들어오는 속성 입력 이름 = "requestURL"의 이름을 보유 선언 된 변수 ...

class Core { 
    static String requestedURL = "requestedURL"; 
} 

의사 코드 :

public ModelAndView login(..., @RequestParam String @ReadFrom(Core.RequestedURL)) 

을 주목 @ReadFrom

피하기 중복이다. 지금은 requestedURL이라고 부르지 만 나중에 누군가가 입력 매개 변수 이름을 변경하려고 할 수 있습니다. 이는 내 의견으로는 응용 프로그램의 하드 코딩 된 문자열이 아니어야합니다. 제출시

<input name="<%= Core.requestedURL %>" value="<%= requestedURL %>" /> 

이 방법에서 읽습니다. 그러나 속성 이름은 동작 방법의 수신 매개 변수에으로 하드 코드 된 이어야합니까?

감사합니다.

답변

1

예, @RequestParam 주석의 일부로 하드 코드해야합니다 (하드 코딩되거나 static final 변수를 참조하십시오).

대안은 모델에 걸릴 것입니다 /지도 추가 방법의 매개 변수와 그에서 속성의 취득 등 :

public ModelAndView login(HttpServletResponse response, HttpServletRequest request, 
Model model){ 
    String requestedURL = model.asMap().get(Core.requestedURL); 
} 

업데이트 당신은 정적 최종 변수에이 방법을 참조 할 수 있습니다 : 가정 :

public abstract class Core { 
    public static final String requestedURL = "requestedURL"; 
} 

public ModelAndView login(..., @RequestParam(Core.requestedURL) String requestedURL) 
+0

최종 작품 좋은, 실제로는 나의 마지막이다. 최종면 어떻게 보일까요? 그렇지 않으면 제안이 좋은 해결 방법이 될 수 있습니다. 감사! – momomo

+0

방금 ​​RequestParam 클래스를 살펴 보았습니다. 속성 값 = ""...이게 뭐야? 최종에 대해서는 아무 것도 말하지 않습니다 .. – momomo

+0

업데이트에 추가했습니다 - 기본적으로 브라우저에서 기대하는 속성 이름입니다. 메소드 매개 변수 자체 (requestedURL)는 컴파일 후에 변경됩니다 (디버그 기호가 켜져 있지 않으면) @RequestParam의 값 속성은 속성의 이름을 표시하는 방법입니다 –