Intégration d'un nouveau controller affichant une vue
Récupération du handler
L'ajout d'un nouveau controller nécessite de récupérer le handler du type de page à afficher.
protected ModelAndView doGet(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
final Frontcontext context = initContext(request, result);
final Map<String, MyHandler> handlerMap = ApplicationContextManager.getAllActivatedBeansOfType(MyHandler.class);
final MyHandler handler = handlerMap.values().stream()
.filter(h -> h.supports(request, response, context))
.findFirst()
.orElseThrow(() -> new IllegalStateException("Aucun handler trouvé"));
return handler.getModelAndView(request, response, frontContext);
}
Création du handler
Le handler est une classe qui implémente l'interface ModelAndViewHandler.
Les handlers sont ordonnés afin de pouvoir déterminer lequel doit être utilisé en priorité.
Ils définissent une méthode supports qui permet de déterminer si le handler peut gérer la requête courante.
La méthode getModelAndView permet de récupérer le modèle et la vue à afficher.
public class MyHandler implements ModelAndViewHandler {
private int order;
@Override
public boolean supports(final HttpServletRequest request, final HttpServletResponse response, final FrontContext frontContext) {
final MyContext context = MyContext.of(frontContext);
return myContext.canHandle();
}
@Override
public ModelAndView getModelAndView(HttpServletRequest request, HttpServletResponse response, final FrontContext frontContext) {
final MyContext context = MyContext.of(frontContext);
final AbstractViewModel viewModel = ViewModelHelper.prepareViewModel("myTemplateType", contentContext, request, response);
final ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName(viewModel.getView());
modelAndView.addAllObjects(viewModel.getAllViewModels());
return modelAndView;
}
@Override
public int getOrder() {
return order;
}
public void setOrder(final int order) {
this.order = order;
}
}
Création de la vue
La création de la vue repose sur le même principe que pour les autres vues.
Un viewModel est créé et un viewPreparer est associé à ce viewModel (cf Principe d'intégration des vues).