- 

Available since OmniFaces 3.10

The <o:sitemapUrl> is a component which renders the given target URL or JSF view ID as a sitemap URL with support for adding additional query string parameters to the URL via nested <f:param> and <o:param>.

This component is largely based off the Url component behind <o:url>, but then tailored specifically for usage in sitemap.xml file. The ViewResourceHandler must be registered in faces-config.xml in order to get JSF components to run in /sitemap.xml.

Values

You can supply the sitemap URL via either the value attribute or the viewId attribute. When both are specified, the value attribute takes precedence and the viewId attribute is ignored.

Domain

When the target URL is specified as viewId, then the domain of the target URL defaults to the current domain. It is possible to provide a full qualified domain name (FQDN) via the domain attribute which the URL is to be prefixed with. This can be useful if a canonical page shall point to a different domain or a specific subdomain.

Valid formats and values for domain attribute are:

  • <o:sitemapUrl ... domain="https://example.com" />
  • <o:sitemapUrl ... domain="//example.com" />
  • <o:sitemapUrl ... domain="example.com" />
  • <o:sitemapUrl ... domain="/" />
  • <o:sitemapUrl ... domain="//" />

The domain value will be validated by URL and throw an illegal argument exception when invalid. If the domain equals /, then the URL becomes domain-relative. If the domain equals or starts with //, or does not contain any scheme, then the URL becomes scheme-relative. If the value attribute is specified, then the domain attribute is ignored.

Request parameters

You can add query string parameters to the URL via nested <f:param> and <o:param>. To conditionally add or override, use the disabled attribute of <f|o:param>.

Usage

Usage example of /sitemap.xml as a JSF view:

<?xml version="1.0" encoding="UTF-8"?>
<urlset
    xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:o="http://omnifaces.org/ui"
>
    <ui:repeat value="#{sitemapBean.products}" var="product">
        <o:sitemapUrl viewId="/product.xhtml" lastModified="#{product.lastModified}" changeFrequency="weekly" priority="1.0">
            <o:param name="id" value="#{product}" converter="productConverter" />
        </o:sitemapUrl>
    </ui:repeat>
</urlset>

Demo

You can find the demo source code below and here the generated sitemap.xml.

Demo
Demo source code
<?xml version="1.0" encoding="UTF-8"?>
<urlset
    xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
    xmlns:f="http://xmlns.jcp.org/jsf/core" 
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:o="http://omnifaces.org/ui"
>
    <f:view contentType="text/xml">
        <o:sitemapUrl viewId="/whatsnew" />
        <ui:repeat value="#{app.pages}" var="_page">
            <o:sitemapUrl viewId="#{_page.viewId}" />
        </ui:repeat>
    </f:view>
</urlset>