docs: @Override
      public int doEndTag() throws JspException {
  
          ServletRequest req = pageContext.getRequest();
          ServletResponse res = pageContext.getResponse();
  
          if (CmsFlexController.isCmsRequest(req)) {
              // this will always be true if the page is called through OpenCms
              CmsObject cms = CmsFlexController.getCmsObject(req);
              String target = null;
  
              // try to find out what to do
              if (m_target != null) {
                  // option 1: target is set with "page" or "file" parameter
                  target = m_target + getSuffix();
              } else if (m_property != null) {
                  // option 2: target is set with "property" parameter
                  try {
                      String prop = cms.readPropertyObject(cms.getRequestContext().getUri(), m_property, true).getValue();
                      if (prop != null) {
                          target = prop + getSuffix();
                      }
                  } catch (RuntimeException e) {
                      // target must be null
                      target = null;
                  } catch (Exception e) {
                      // target will be null
                      e = null;
                  }
              } else if (m_attribute != null) {
                  // option 3: target is set in "attribute" parameter
                  try {
                      String attr = (String)req.getAttribute(m_attribute);
                      if (attr != null) {
                          target = attr + getSuffix();
                      }
                  } catch (RuntimeException e) {
                      // target must be null
                      target = null;
                  } catch (Exception e) {
                      // target will be null
                      e = null;
                  }
              } else {
                  // option 4: target might be set in body
                  String body = null;
                  if (getBodyContent() != null) {
                      body = getBodyContent().getString();
                      if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(body)) {
                          // target IS set in body
                          target = body + getSuffix();
                      }
                      // else target is not set at all, default will be used
                  }
              }
  
              // now perform the include action
              includeTagAction(
                  pageContext,
                  target,
                  m_element,
                  null,
                  m_editable,
                  m_cacheable,
                  m_parameterMap,
                  CmsRequestUtil.getAtrributeMap(req),
                  req,
                  res);
  
              release();
          }
  
          return EVAL_PAGE;
      }