PV230 - cvičení 3 - příklady + postup PV230 - cvičení 3 Resource serving Statický obsah (obrázky) Do view.jsp přidat a upravit následující řádky ... <%-- pridat --%> detail
<%-- upravit --%>
... Do CatalogConstants přidat public static final String ICON_DETAIL = "/img/detail.png"; Dynamický obsah Do view.jsp přidat var dataSource = new A.DataSource.IO( { source: '' } ); var autocomplete = new A.AutoComplete( { dataSource: dataSource, matchKey: 'name', schemaType:'json', schema: { resultFields: ['name'] }, delimChar: ',', contentBox: '#drop-down', typeAhead: true, input: '#query' } ); autocomplete.generateRequest = function(query) { return { request: '&q=' + query }; } autocomplete.render(); ... <%-- upravit --%> V CatalogPorltet přidat @Override public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException { String resourceID = request.getResourceID(); if (RESOURCE_QUERY.equals(resourceID)) { serveAutocompleteQuery(request, response); } else { super.serveResource(request, response); } } private void serveAutocompleteQuery(ResourceRequest request, ResourceResponse response) throws IOException { String searchString = request.getParameter(PARAM_AUTOCOMPLETE_QUERY); if (searchString == null) { return; } PrintWriter out = null; try { response.setContentType("text/json"); out = response.getWriter(); out.print("["); Iterator it = ServiceProvider.getCatalog().findProducts(searchString).iterator(); while (it.hasNext()) { ProductDTO p = it.next(); out.print("[\"" + p.getName() + "\"]"); if (it.hasNext()) { out.print(","); } } out.print("]"); } catch (IOException ex) { // log error } finally { out.close(); } } Do CatalogConstants přidat public static final String PARAM_AUTOCOMPLETE_QUERY = "q"; public static final String RESOURCE_QUERY = "query"; Meziportletová komunikace - veřejné parametry Vytvoříme portlet Detail, který bude zobrazovat podrobné informace o produktu. Vytvoříme package eu.ibacz.pv230.simpleshop.portlet.detail a v něm třídy DetailPortlet a DetailConstants. DetailPortlet @Override protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { String productId = request.getParameter(PARAM_PRODUCT_ID); if (productId != null) { long id = Long.parseLong(productId); request.setAttribute(ATTRIBUTE_PRODUCT, ServiceProvider.getCatalog().getProductById(id)); } PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher(JSP_VIEW); dispatcher.include(request, response); } DetailConstants public class DetailConstants extends SimpleShopConstants { public static final String JSP_VIEW = "/WEB-INF/jsp/detail/view.jsp"; } Vytvoříme složku /WEB-INF/jsp/detail a v ní jsp stránku s následujícím obsahem <%@include file="../init.jspf" %> <%@page import="static eu.ibacz.pv230.simpleshop.portlet.detail.DetailConstants.*" %>

Vytvoříme properties soubor detail ve složce content s následujícími klíči javax.portlet.title=Detail ss-msg-product-detail=Product detail ss-msg-name=Name ss-msg-description=Description ss-msg-price=Price ss-msg-no-product-selected=No product selected. V portlet.xml přidat Detail portlet a public render parametr Catalog eu.ibacz.pv230.simpleshop.portlet.catalog.CatalogPortlet text/html view en cs content.catalog productId Detail eu.ibacz.pv230.simpleshop.portlet.detail.DetailPortlet text/html view en cs content.detail productId http://pv230.ibacz.eu/cv3 productId productId Do liferay-portlet.xml Detail true Do liferay-display.xml Do catalog/view.jsp přidat detail