Eine Frage zur Zuordnung von Wildcard-Anfragen auf Typ-Ebene und zu den logischen Namen von Springs-Ansichten, die aus den Rückgaben von Leere- und Domänenobjekten abgeleitet werden. Nehmen wir an, ich habe das Folgende
@Controller
class HomeController
{
@RequestMapping(value="/")
public void index () {}
}
Mein Verständnis davon, wie Springs logische Ansicht Namen Generation ist, dass die oben genannten Controller "/" auf die logische Ansicht Namen "Index", die ich dann, zum Beispiel, verwenden Apache Tiles, um gegen eine entsprechende JSP-Ansicht übereinstimmen zuordnen wird.
In ähnlicher Weise veranschaulicht dies mein Verständnis von der Erstellung des logischen Ansichtsnamens Springs (aber ich glaube, ich übersehe etwas...)
@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);
}
}
Sache ist, ist, dass die Liste-Methode nie als die "Index"-Seite der Sammlung aufgelöst wird - stattdessen scheint der logische Ansichtsname "Sammlung" (die ich havent definiert - ich möchte den logischen Ansichtsnamen "Sammlung/Liste" sein. Die "Element"-Methode funktioniert, es ist nur so, dass die Index-Seite nicht sorry für die vage Frage- nicht sicher, wie sonst, um es zu setzen-
Wie kann ich die Vorteile der Generierung des logischen View-Namens von Springs aus Methodennamen auf der Basis von Wildcard-URLs auf Typebene nutzen, ohne Strings zur Definition des logischen View-Namens zurückzugeben? Das obige funktioniert nicht so, wie ich es erwartet habe. Was übersehe ich?
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;
}
}
Und meine Kachelordnerstruktur ist
src/main/webapp/layouts (contains base page.jsp)
und
src/main/webapp/views/[VIEWNAME]/tiles.xml
wobei VIEWNAME ein Ansichtsname ist (Entschuldigung!) und die Ansichtspfade für diesen Ansichtsnamen in der Datei tiles.xml des jeweiligen Ordners definiert sind. Ich hoffe, das macht die Dinge klarer...