关于类型级通配符请求映射和从 void 和域对象返回派生的 Springs 逻辑视图名称的问题。说我有以下
@Controller
class HomeController
{
@RequestMapping(value="/")
public void index () {}
}
我对 Springs 逻辑视图名称生成方式的理解是,上面的控制器会将“/”映射到逻辑视图名称“索引”,然后我可以使用 Apache Tiles 来匹配适当的 jsp 视图。
同样,这表明了我对 Springs 逻辑视图名称创建的理解(但我认为我遗漏了一些东西......)
@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);
}
}
问题是,列表方法永远不会被解析为集合的“索引”页面——相反,逻辑视图名称似乎是“集合”(我还没有定义——我希望逻辑视图名称是“集合/列表”。“项目”方法有效-只是索引页面没有-对含糊的问题感到抱歉-不知道该怎么说-
如何在类型级别上利用基于通配符 url 的方法名称生成 Springs 逻辑视图名称,而不返回字符串来定义逻辑视图名称?以上不符合我的预期。我错过了什么?
更新:
@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;
}
}
我的瓷砖文件夹结构是
src/main/webapp/layouts (contains base page.jsp)
和
src/main/webapp/views/[VIEWNAME]/tiles.xml
其中 VIEWNAME 是视图名称(对不起!),该视图名称的视图路径在该文件夹 tiles.xml 中定义。希望这能让事情更清楚......