2012-05-14 4 views
1

유형 수준 와일드 카드 요청 매핑 및 void 및 도메인 객체 반환에서 파생 된 스프링 논리보기 이름에 대한 질문. 나는Spring 3.1 유형 수준 요청 매핑 및 논리보기 이름

@Controller 
class HomeController 
{ 
    @RequestMapping(value="/") 
    public void index() {} 
} 

논리적 뷰 이름 생성 스프링스 방법의 나의 이해는 위의 컨트롤러가 난 후, 예를 들어, 아파치 타일을 사용할 수있는 논리적 뷰 이름 "인덱스"를 "/"지도 것입니다 다음 한 말 적절한 jsp 뷰와 일치시킵니다. 마찬가지로

,이, (하지만 난 뭔가를 놓친 것 같아 ...)

@Controller 
@RequestMapping("/collection/*") 
class CollectionController 
{ 

    @Autowired 
    private SomeService someService; 

    @RequestMapping(method=RequestMethod.GET) 
    public List<Item> list() 
    { 
     // in my understanding 
     // itemList should be available in the model (via generated name), 
     // that the logical view name generated should be 
     // collection/list and that this method 
     // would intercept the url "/collection/" or "/collection" 
     return someService.getItems(); 
    } 

    @RequestMapping("/{itemId}") 
    public Item item (@PathVariable final String itemId) 
    { 
     // similiarly, item should be available in the 
     // model and the logical view name should be 
     // collection/item 
     return someService.getItem(itemId); 
    } 
} 

것입니다 스프링스 논리적 뷰 이름 생성에 대한 이해를 보여줍니다 목록 방법으로 해결되지 않는다 있다는 것입니다 ' 대신에 논리적 뷰 이름이 "collection"으로 나타납니다 (논리적 뷰 이름이 "collection/list"가되도록 정의했습니다.) 'item'메소드는 작동합니다. 색인 페이지는 막연한 질문을 던져서 미안합니다. 다른 방법을 쓰는 방법을 모르십니까?

스프링 논리적 뷰 이름 생성 fr을 어떻게 활용할 수 있습니까? 논리적 뷰 이름을 정의하기 위해 문자열을 반환하지 않고 유형 수준에서 와일드 카드 URL을 기반으로 메서드 이름을? 위의 내용은 예상대로 작동하지 않습니다. 내가 뭘 놓치고 있니?

UPDATE :

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter 
{ 

    static private String [] TILES_DEFINITIONS= new String [] { "/WEB-INF/layouts/tiles.xml", "/WEB-INF/views/**/tiles.xml"}; 

    /* static resource resolution */ 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) 
    { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 

    /** 
    * ViewResolver configuration required to work with Tiles2-based views. 
    */ 
    @Bean 
    public ViewResolver viewResolver() 
    { 
     UrlBasedViewResolver viewResolver= new UrlBasedViewResolver(); 
     viewResolver.setViewClass(TilesView.class); 
     return viewResolver; 
    } 

    /** 
    * Configures Tiles at application startup. 
    */ 
    @Bean 
    public TilesConfigurer tilesConfigurer() 
    { 
     final TilesConfigurer configurer= new TilesConfigurer(); 
     configurer.setDefinitions(TILES_DEFINITIONS); 
     configurer.setCheckRefresh(true); 
     return configurer; 
    } 
} 

그리고 내 타일 폴더 구조 VIEWNAME는 뷰 이름 (!) 미안 볼 경로가보기위한 것입니다

src/main/webapp/layouts (contains base page.jsp) 

src/main/webapp/views/[VIEWNAME]/tiles.xml 

입니다 이름은 tiles.xml 폴더에 정의됩니다. 희망은 물건을 명확하게 ...

+0

보기를 렌더링하기 위해 ViewResolver를 어떻게 구성했는지 보여줄 수 있습니까? 내가 대답 할 수있는 것을보고 나서. –

+0

일본에 가면 도움이됩니다. 감사합니다. – VLostBoy

답변

0

정확하게 이해하면 목록 방법이/collections의 GET에 응답하도록 설정되어 있고 기본보기 이름 확인을 활용하고 싶지만 다음과 같은보기 이름이 필요합니다.

기본 해상도는 요청이 전송 된 곳 (사용자의 경우 /collections)에 대한 http 경로를 기반으로하며, 대신 GET 요청이 전송 된 경우보기는 collections입니다. /collections/list으로 변경하면보기 이름은 collections/list이됩니다. 규칙에 대한 자세한 내용은 DefaultRequestToViewNameTranslator에 대한 API를 참조하십시오.

그러나 귀하는 /collections으로 전송 된 요청을 collections/list보기 이름으로 확인하고 싶습니다.

내가 일을 한 방향으로 만 볼 수 있습니다 - 명시 적 방법에서 뷰 이름을 반환하는 return "collections/list";

사용자 지정 RequestToViewNameTranslator를 작성 시도 할 수 있지만에 전달 된 매개 변수는 HttpRequest를, 당신은 많이 유도 할 수 그것으로부터, 당신이 찾고있는 것과 같은 것을 만들 수 있습니다.

+0

고마워요 Biju- 나는 용의자로 생각하기 시작했습니다.명확하게하기 위해 RequestMethod.GET으로 주석 처리 된 list 메소드는 논리적 뷰 이름 "campaigns"를 생성 할 것이고 메소드 이름 "list"는 명시 적으로 "collections/list "또는 ModelAndView와 viewName이"collections/list "...로 설정 되었습니까? – VLostBoy

+0

네, 맞습니다. 메소드는'/ collections/*'('/ collections',''/ collections/list' 등)에 대한 GETS에 응답 할 것입니다. 앞에서 말했던 것처럼'collections/list' 문자열을 반환 할 수도 있고, viewName을'collections/list'로 설정 한 ModelAndView를 반환 할 수도 있습니다. –