PV230 - cvičení 5 - příklady + postup PV230 - cvičenie 5 Pridanie Eventov jsp/detail/view.jsp pridáme tlačidlo, ktoré na kliknutie vyvolá akciu (portlet:actionURL), ktorá bude znamenať, že užívateľ si chce kúpiť daný produkt:
"buttons" "<%=ACTION_ADD_TO_BASKET%>" var "addToBasketURL" "<%=PARAM_PRODUCT_ID%>" "${product.id}" key=" "/>"
DetailPortlet.java pridáme spracovanie tejto akcie, ktoré spôsobí vyvolanie portletovej udalosti (eventu), ktorú bude spracovávať náš ďaľší portlet @ProcessAction(name=ACTION_ADD_TO_BASKET) void actionBuy(ActionRequest request, ActionResponse response)public throws PortletException, IOException { productId = request.getParameter(PARAM_PRODUCT_ID);String id = .parseLong(productId);long Long ProductDTO product = ServiceProvider.getCatalogService().getProductById(id); response.setEvent(EVENT_BUY_PRODUCT, product); response.setRenderParameter(PARAM_PRODUCT_ID, productId); } portlet.xml pridáme definíciu portletovej udalosti do portlet.xml (pozor na umiestnenie) buyProductEvent eu.ibacz.pv230.backend.dto.ProductDTO deklarujeme, že portlet DetailPortlet túto udalosť odosiela buyProductEvent Konfigurácia Spring Portlet MVC pom.xml pridáme dependency na knižnicu Spring Portlet MVC: org.springframework spring-webmvc-portlet 3.0.3.RELEASE upravíme aby ukazoval na správny adresár web.xml upravíme web.xml, tak aby jeho obsah bol: contextConfigLocation /WEB-INF/spring-context/applicationContext.xml org.springframework.web.context.ContextLoaderListener ViewRendererServlet org.springframework.web.servlet.ViewRendererServlet 1 ViewRendererServlet /WEB-INF/servlet/view applicationContext.xml vytvoríme súbor WEB-INF/spring-context/applicationContext.xml, ktorý obsahuje všeobecnú konfiguráciu Springu pre celú aplikáciu pridáme importy na ďaľšie Springové konfiguračné súbory, ktoré sa nachádzajú v backende a nastavujú pripojenie na databázu: < resource= />import "classpath*:META-INF/liferay-data-source.xml" < resource= />import "classpath*:META-INF/spring-backend.xml" Tvorba 'portletu' vytvoríme triedu s anotáciami @Controllereu.ibacz.pv230.simpleshop.portlet.basket.BasketViewController a @RequestMapping("VIEW") pridáme si atribút BasketService, pomocou ktorého budeme pracovať s košíkom. Tento atribút nám bude Spring injectovať pomocou Dependency Injection: @Autowired BasketService basketService;private pridáme metódu obsluhujúcu render požiadavky portletu - podobne ako je metóda z Portlet API:doView @RenderMapping renderDefault(RenderRequest request, Model model) {public String BasketDTO basket = basketService.getBasket(request.getRemoteUser()); model.addAttribute(ATTRIBUTE_BASKET, basket); JSP_VIEW;return } nakonfigurujeme ViewResolver v applicationContext.xml "org.springframework.web.servlet.view.InternalResourceViewResolver" "viewClass" "org.springframework.web.servlet.view.JstlView" "contentType" "text/html;charset=UTF-8" "prefix" "/WEB-INF/jsp/" "suffix" ".jsp" vytvoríme JSP stránku s portletom, na umiestnení ktoré sme určili v metóde :renderDefault <%@include file= %>"../init.jspf" <%@page = %>import " eu.ibacz.pv230.simpleshop.portlet.basket.BasketConstants.*"static
"${ns}basketView" "basket-portlet"
:"label" "label-product-count" "${basket.itemCount}"
"divider"
:"label" "label-total-price" "${basket.totalPrice}"
"buttons" var "showBasketURL" "maximized" "<%=PARAM_PAGE%>" "<%=PAGE_BASKET_MAXIMIZED%>" ""
vytvoríme konfiguračný súbor Springu určený pre tento portlet - :spring-context/portlet/basket-portlet.xml package "eu.ibacz.pv230.simpleshop.portlet.basket" "org.springframework.context.support.ResourceBundleMessageSource" "useCodeAsDefaultMessage" " "true "basenames" content.basket pridáme definíciu portletu do :portlet.xml Basket org.springframework.web.portlet.DispatcherPortlet contextConfigLocation /WEB-INF/spring-context/portlet/basket-portlet.xml text/html VIEW en cs content.basket buyProductEvent pridáme definíciu portletu do :liferay-portlet.xml Basket true /css/common.css /css/basket.css pridáme definíciu portletu do :liferay-display.xml "SimpleShop" ... "Basket" ... máme funkčný (dúfam ) portlet! Spracovanie udalostí deklarovali sme v , že náš portlet je schopný prijímať udalosť , naimplementujemeportlet.xml buyProductEvent teda jej spracovanie pridáme metódu oanotovanú , ktorá udalosť spracuje:@EventMapping @EventMapping(EVENT_BUY_PRODUCT) void eventBuyProduct(EventRequest request, EventResponse response) {public ProductDTO product = (ProductDTO) request.getEvent().getValue(); basketService.addProductToBasket(product, request.getRemoteUser()); } máme fungujúci košík!