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 --%>
<%-- 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
Catalogeu.ibacz.pv230.simpleshop.portlet.catalog.CatalogPortlettext/htmlviewencscontent.catalogproductIdDetaileu.ibacz.pv230.simpleshop.portlet.detail.DetailPortlettext/htmlviewencscontent.detailproductIdhttp://pv230.ibacz.eu/cv3productIdproductId
Do liferay-portlet.xml
Detailtrue
Do liferay-display.xml
Do catalog/view.jsp přidat