Search code examples
javajspopencms

<cms:include without <p> tag


Is there any solution to have something like <cms:include type="OpenCmsString" element="text1" /> ? Because the output from my <cms:include element="text1"> always give me data with <p> tag.

Any kind help is appreciated.


Solution

  • I've once created my own tag for that (StripPTag). You would compile that class and wrap it in a jar file, then deploy that to your opencms webapp lib folder.

    package com.opencmsserver.taglib;
    
    import org.opencms.flex.CmsFlexController;
    import org.opencms.jsp.Messages;
    import org.opencms.main.CmsLog;
    
    import javax.servlet.ServletRequest;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.BodyTagSupport;
    
    import org.apache.commons.logging.Log;
    
    /**
     * Removes the <p> tag from the surrounded content, 
     * because FCKEditor always add <p> tag to content at 
     * the beginning and end when using the html editor component  
     *
     * @author  Mathias Lin 
     * 
     * @version $Revision: 0.1 $ 
     * 
     * @since 0.4 
     */
    public class StripPTag extends BodyTagSupport {
    
        /** Serial version UID required for safe serialization. */
        private static final long serialVersionUID = -2361021288258405388L;
    
        /** The log object for this class. */
        private static final Log LOG = CmsLog.getLog(StripPTag.class);
    
    
        /**
         * @see javax.servlet.jsp.tagext.Tag#doEndTag()
         * @return EVAL_PAGE
         * @throws JspException in case soemthing goes wrong
         */
        public int doEndTag() throws JspException {
    
            ServletRequest req = pageContext.getRequest();
    
            // This will always be true if the page is called through OpenCms 
            if (CmsFlexController.isCmsRequest(req)) {
                try {
                    // Get link-string from the body and reset body 
                    String content = getBodyContent().getString();
                    content = content.replaceAll("<p>", "");
                    content = content.replaceAll("</p>", "");
                    getBodyContent().clear();
                    getBodyContent().print(content);
                    getBodyContent().writeOut(pageContext.getOut());
    
                } catch (Exception ex) {
                    if (LOG.isErrorEnabled()) {
                        LOG.error("Failed using StripPTag. ", ex);
                    }
                    throw new JspException(ex);
                }
            }
            return EVAL_PAGE;
        }
    }
    

    and my own opencmsserver.tld:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <!DOCTYPE taglib
      PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
    
    <taglib>
        <tlib-version>0.1</tlib-version>
        <jsp-version>1.2</jsp-version>
        <short-name>opencmsserver</short-name>
        <uri>http://www.opencmsserver.com/taglib/cms</uri>
        <display-name>OpenCms JSP standard taglib</display-name>
        <description>
            Additional OpenCms Tags
            Developed by SYSVISION Ltd. / Mathias Lin ([email protected])
        </description>
    
        <tag>
            <name>stripPTag</name>
            <tag-class>com.opencmsserver.taglib.StripPTag</tag-class>
            <body-content>JSP</body-content>
            <description>
                This tag stripts the p-tag from the surrounded content.
            </description>
        </tag>         
    
    </taglib>
    

    which I then reference in my web.xml:

    <!-- Begin: Custom SYSVISION OpenCmsServer lib -->      
    <taglib>
        <taglib-uri>http://www.opencmsserver.com/taglib/opencmsserver</taglib-uri>
    <taglib-location>/WEB-INF/opencmsserver.tld</taglib-location>
    </taglib>
    

    In your jsp, you just surround it then with:

    <opencmsserver:stripPTag>Some content<p>with a paragraph</opencmsserver:stripPTag>
    

    (and don't forget to reference to this tag lib in the jsp header section).