HstComponent Java Class Examples - BloomReach Experience - Open Source CMS

This article covers a Hippo CMS version 10. There's an updated version available that covers our most recent release.

13-05-2015

HstComponent Java Class Examples

Below is the code for a very simple HstComponent that sets the  HippoBean that belongs to the resolved sitemap item on the HstRequest ( HttpServletRequest). We also set the site content base bean, which is the 'root' bean for the current (sub)site on the request as an example.

Simple HstComponent extending BaseHstComponent:

public class Detail extends BaseHstComponent {
  @Override
  public void doBeforeRender(final HstRequest request,
                             final HstResponse response) throws HstComponentException {

      HstRequestContext ctx = request.getRequestContext();
      // get the content bean for the current resolved sitemap item and
      // set it on the request to make it available for
      // the renderer like jsp or freemarker
      HippoBean documentBean = ctx.getContentBean();
      request.setAttribute("document",documentBean);

      // or, getting the content bean strong typed and null if the bean is
      // not of type NewsDocument
      NewsDocument newsDocument = ctx.getContentBean(NewsDocument.class);

      // get the content bean for the root of the current (sub)site and set
      // it on the request to make it available for
      // the renderer like jsp or freemarker
      HippoBean  rootBean = ctx.getSiteContentBaseBean();
      request.setAttribute("root",rootBean);

      // get the base bean where all assets are stored, for example to use
      // in a HstQuery
      HippoFolderBean assetBaseBean = getAssetBaseBean(request);

      // get the base bean where all gallery items are stored, for example
      // to use in a HstQuery
      HippoFolderBean galleryBaseBean = getGalleryBaseBean(request);
    }

}

Example about accessing namespaced and public request parameters:

Accessing namespaced and public request paramaters:

public class Detail extends BaseHstComponent {
    // tries to get the namespaced request parameter 'page'.
    // For example, when the namespace of this component is
    // r1_r2, then, only when the request parameter is
    // 'r2_r2:page', it's value will be assigned to strPage
    // below

    String strPage = request.getParameter("page");

    // getPublicRequestParameter fetches the request parameter 'query' without
    // namespacing! This is useful when for example the query is submitted
    // through a html form, and needs to be rendered in a different
    // HstComponent than the one that dispatched to the jsp that created the
    // search form.
    String query = getPublicRequestParameter(request, "query");
}

Example about getting hst component configuration parameters  without  ParametersInfo annotation (note that using ParametersInfo is  preferred, see HstComponent ParametersInfo annotation)

public class Detail extends BaseHstComponent {
    // get the page size parameter from the HstComponent. If the parameter
    // value contained property place holders like ${1} then these are
    // resolved
    String pageSize = getComponentParameter("pageSize");

   // get the page size parameter from the HstComponent. If the parameter
   // value contained property place holders like ${1} these are *not*
   // resolved
   String pageSizeRaw = getComponentConfiguration().getRawParameters()
                                                             .get("pageSize");

   // get the page size parameter from the HstComponent *without inheritance*
   // from ancestor components
   String localPageSize = getComponentLocalParameter("pageSize");

   // get the page size parameter from the HstComponent *without inheritance*
   // from ancestor components and *without* having property place holders
   // like ${1} resolved
   String localRawPageSize = getComponentConfiguration()
                                 .getRawLocalParameters().get("pageSize");
}

The example below is an example of an HstComponent which is a Search implementation.  Note that it does not use ParametersInfo annotation, which is the preferred way, see HstComponent ParametersInfo annotation. On the HstRequest, the search  result, the crPage, the query and an list of available page numbers is set. The renderer (jsp / freemarker) can iterate through the  result which returns  HippoBean's for every hit.

public class Search extends BaseHstComponent {

    @Override
    public void doBeforeRender(final HstRequest request,
                               final HstResponse response) throws HstComponentException {

        // get the root content bean for the current (sub)site.
        // This is the scope to search below
        HstRequestContext ctx = request.getRequestContext();
        HippoBean scope = ctx.getSiteContentBaseBean();
        if (scope == null) {
            throw new HstComponentException("Scope is not allowed to be null for a search");
        }
        int pageSize = 10; // the free text to search on
        String query = getPublicRequestParameter(request, "query");
        if (query == null) { // test namespaced query parameter
            query = request.getParameter("query");
        }
        String crPageStr = request.getParameter("page");
        int crPage = 1;
        if (crPageStr != null) {
            try {
                crPage = Integer.parseInt(crPageStr);
            } catch (NumberFormatException e) {
                throw new HstComponentException("Invalid page number '" + crPage + "'");
            }
        } // search for news items
        Class filterClass = getObjectConverter()
                                   .getAnnotatedClassFor("myhippoproject:news");
        try {
            HstQuery hstQuery = ctx.getQueryManager()
                                   .createQuery(scope, filterClass, true);
            hstQuery.setLimit(pageSize);
            if (query != null && !"".equals(query)) {
                Filter f = hstQuery.createFilter();
                f.addContains(".", query);
                hstQuery.setFilter(f);
            }
            HstQueryResult result = hstQuery.execute();
            request.setAttribute("result", result);
            request.setAttribute("crPage", crPage);
            request.setAttribute("query", query);
            request.setAttribute("totalSize", result.getTotalSize()); // add pages 
            if (result.getTotalSize() > pageSize) {
                List<Integer> pages = new ArrayList<Integer>();
                int numberOfPages = result.getTotalSize() / pageSize;
                if (result.getTotalSize() % pageSize != 0) {
                    numberOfPages++;
                }
                for (int i = 0; i < numberOfPages; i++) {
                    pages.add(i + 1);
                }
                request.setAttribute("pages", pages);
            }
        } catch (QueryException e) {
            throw new HstComponentException("Exception occured during creation " +
                                            "or execution of HstQuery.", e);
        }
    }
}
Did you find this page helpful?
How could this documentation serve you better?
On this page
    Did you find this page helpful?
    How could this documentation serve you better?