views:

2048

answers:

2

I am developing a Struts based application. I am new to Struts. I want to use html tags , specified in a taglib directory provided by Struts, in a JSP page.

But don't know how to use it. I know how to use taglib directive but I came to know from sources that the .tld file has been embedded in a .jar file after version 1.2.8. I am using Struts version 2.1.8.

I don't know in which .jar file the struts-html.tld file is located.

+2  A: 

I'm using the Struts 1.3.10 for this illustration:

  1. Download the latest struts library here (http://struts.apache.org/download.cgi#struts1310). Remember, the Full Distribution is that what you have to download as it contains a war file with the Struts TLD's.
  2. On your web application, copy all the lib in the archive file you downloaded to your /WEB-INF/lib folder.
  3. For JSTL libraries (which works well with struts) go here (http://java.sun.com/products/jsp/jstl/)
  4. Once you have your Struts TLD's and JSTL Tld's, put them under the /WEB-INF/tld/ folder (it must be situated in the /WEB-INF/ folder).
  5. On web.xml add the following stuff (under the <web-app> element)

(there is an issue with XML tags and lists on SO)

<jsp-config>
    <taglib>
        <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
        <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
        <taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
        <taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
        <taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
        <taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>/WEB-INF/sslext.tld</taglib-uri>
        <taglib-location>/WEB-INF/tld/sslext.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>/WEB-INF/struts-layout.tld</taglib-uri>
        <taglib-location>/WEB-INF/tld/struts-layout.tld</taglib-location>
    </taglib>

    <!-- Sun's JSTL -->
    <taglib>
        <taglib-uri>http://java.sun.com/jstl/fn&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/fn.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/fmt&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/fmt-1-0&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/fmt-1_0.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/fmt-rt&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/fmt-rt.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/fmt-1-0-rt&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/fmt-1_0-rt.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/core&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/core-1-0&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/c-1_0.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/core-rt&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/c-rt.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/core-1-0-rt&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/c-1_0-rt.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/sql&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/sql.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/sql-1-0&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/sql-1_0.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/sql-rt&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/sql-rt.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/sql-1-0-rt&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/sql-1_0-rt.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/x&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/x.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/x-1-0&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/x-1_0.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/x-rt&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/x-rt.tld</taglib-location>
    </taglib>

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/x-1-0-rt&lt;/taglib-uri&gt;
        <taglib-location>/WEB-INF/tld/x-1_0-rt.tld</taglib-location>
    </taglib>
</jsp-config>

This tells that once you call your TLD from the JSP, your webapp will look for the matching <taglib-uri> then look for it's location on <taglib-location> and find relevant class to call.

On your JSP, now you can do this:

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jstl/fn" prefix="fn" %>

Hope this helps.

The Elite Gentleman
I don't do Struts, so I won't say anything about it, but for JSTL there's **absolutely no need** to extract the JAR file and clutter the `/WEB-INF` with loose TLD files. Just dropping the JAR file(s) in `/WEB-INF/lib` and declaring the taglibs in top of JSP as per the TLD documentation is sufficient to get JSTL to work. That ought also be the normal practice for all the other JSP taglibs: 1) drop JAR file(s) in classpath (i.e. `/WEB-INF/lib`), 2) declare `taglib` in JSP. That's all. Similar answer: http://stackoverflow.com/questions/2323645
BalusC
Thanks...I didn't know that....Geez, I'll try your method...
The Elite Gentleman
@BalusC...so what MVC frameworks do you use?
The Elite Gentleman
JSF all the way. Further I've played a bit with Stripes and Spring MVC as well (just for hobby purposes). I've also a private/homegrown convention-over-configuration MVC framework on top of JSP/Servlet.
BalusC
A: 

BalusC is correct: you just need the JAR files in /WEB-INF/lib and a proper taglib in each JSP. One thing that tripped me up initially was the sensitive JSP syntax; spaces between some elements are important. Per the Stripes documentation, each taglib for the Stripes TLD should look like:

<%@ taglib prefix="stripes"

uri="http://stripes.sourceforge.net/stripes.tld" %>

(Minus the linebreak...silly blockquotes.)

pianoman