Try it without the <taglib>...</taglib> in web.xml. Tomcat (and any other JSP-2.0 container) will pick up a .tld in /META-INF of a jar file in WEB-INF/lib automagically.
Unfortunately, Jasper is hiding the root cause of the Exception that is being thrown, so I can't see why it's unhappy :(. If the above doesn't fix anything, check the file permissions under WEB-INF (e.g. the user Tomcat is running as can read and list all directories). "Justin Moore" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] Hi, I am using tomcat version 5.5.12 and am getting the following exception and cannot find a way around the issue. Google isn't offering much. I have also included my web.xml below. One site on google mentioned that taglib declarations should no longer use the <!DOCTYPE .. command. I also have included my taglib definition. I have been struggling with this for a couple of days, and now need to resort to the experts, so you help is greatly appreciated. Thanks, Justin ============================== The exception: ============================== org.apache.jasper.JasperException: Unable to initialize TldLocationsCache: null org.apache.jasper.compiler.TldLocationsCache.init(TldLocationsCache.java :252) org.apache.jasper.compiler.TldLocationsCache.getLocation(TldLocationsCac he.java:223) org.apache.jasper.JspCompilationContext.getTldLocation(JspCompilationCon text.java:526) org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:422) org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492) org.apache.jasper.compiler.Parser.parseElements(Parser.java:1552) org.apache.jasper.compiler.Parser.parse(Parser.java:126) org.apache.jasper.compiler.ParserController.doParse(ParserController.jav a:211) org.apache.jasper.compiler.ParserController.parse(ParserController.java: 100) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:146) org.apache.jasper.compiler.Compiler.compile(Compiler.java:286) org.apache.jasper.compiler.Compiler.compile(Compiler.java:267) org.apache.jasper.compiler.Compiler.compile(Compiler.java:255) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.ja va:563) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja va:293) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) ============================== The Web.xml ============================== <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>WorkbenchFileManager</display-name> <description> Receives file upload/download requests for the Workbench web application. The idea is that the Workbench will cause any file posts or gets to go through this application, so that this application can potentially reside on a separate, more secure server. Upon completion of file uploads, this application will post-back the results to a specified URL on the Workbench site. This will return the user to the workflow of that application, keeping this application as simple as possible. </description> <!-- Tell the application what its name is. --> <context-param> <param-name>appname</param-name> <param-value>WorkbenchFileManager</param-value> </context-param> <!-- ***** LISTENERS ***** These are called on application start in the order they appear. They are called again on application stop in reverse of the order in which they appear. --> <!-- Controls the SystemLog --> <listener> <listener-class>com.cbase.web.product.workbench.SystemLogLifecycleManage r</listener-class> </listener> <!-- Controls the Performance Log --> <listener> <listener-class>com.cbase.web.product.workbench.PerformanceLogLifecycleM anager</listener-class> </listener> <!-- Controls the ApplicationController --> <listener> <listener-class>com.cbase.web.product.workbench.ApplicationControllerLif ecycleManager</listener-class> </listener> <!-- Error Page Mappings --> <error-page> <error-code>404</error-code> <location>/systemunavailabledisplay.jsp</location> </error-page> <taglib> <taglib-uri>http://ecount.com/tags/framework</taglib-uri> <taglib-location>/WEB-INF/lib/ClientFrameworkTags.jar</taglib-location> </taglib> </web-app> ============================== The TagLib.tld ============================== <?xml version="1.0" encoding="ISO-8859-1"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_ 0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>tables</short-name> <uri>http://ecount.com/tags/jsptables</uri> <display-name>Ecount JSP Tables</display-name> <description> Provides Table Generation Support for building Web UIs. Use of this taglib requires that the jsptables.js file be included in your web application under the following relative path: scripts/jsptables.js. </description> <tag> <name>grid</name> <tag-class>com.cbase.web.jsp.tables.GridTag</tag-class> <tei-class>com.cbase.web.jsp.tables.GridTagExtraInfo</tei-class> <body-content>JSP</body-content> <description> Produces a grid containing the contents of the specified collection. The grid-col tag is used to define the columns of each row in the grid. The grid-detail tag is used to add an extra row of data whose visibility can be toggled. </description> <attribute> <name>id</name> <required>false</required> <description> Used as the ID attribute of the root HTML element of the grid. </description> </attribute> <attribute> <name>lineStyle</name> <required>false</required> <description> Optionally specify the CSS class used for each line. </description> </attribute> <attribute> <name>altLineStyle</name> <required>false</required> <description> Optionally specify an alternate CSS class to be used on every other line. This will let you achieve the "alternating background colors" thing. Note: both the primary line and any grid-details will have the same background color. </description> </attribute> <attribute> <name>collection</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.util.Collection</type> <description> The Collection to iterate over in the grid. </description> </attribute> <attribute> <name>var</name> <required>true</required> <description> The name of the scripting variable accessed by child tags to hold the current element of the collection during iteration. </description> </attribute> <attribute> <name>varType</name> <required>true</required> <description> The class name of the datatype of the contents of the collection. </description> </attribute> <attribute> <name>header</name> <required>false</required> <description> Toggles whether or not a header row is displayed for the grid. Default is true. </description> </attribute> </tag> <tag> <name>grid-col</name> <tag-class>com.cbase.web.jsp.tables.GridColumnTag</tag-class> <body-content>JSP</body-content> <attribute> <name>idBase</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> <description> The ID of each column generated by the iteration will start with this ID and then append a counter starting with 0. </description> </attribute> <attribute> <name>colStyle</name> <required>false</required> <description> Optionally specify the CSS class for the column. </description> </attribute> <attribute> <name>cellStyle</name> <required>false</required> <description> Optionally specify the CSS class for each cell within the column. </description> </attribute> <attribute> <name>field</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> If specified, the name of the field of the current item in the collection to output as the column contents, the body contents will be ignored. If not specified, then the contents of the tag's body are used. </description> </attribute> <attribute> <name>sortable</name> <required>false</required> <description> Indicates that the field can be sorted by the client in the browser. Default is false. </description> </attribute> <attribute> <name>displayName</name> <required>false</required> <description> Optional column name for the column. If not specified, the display name will be the same as the field name. If there is no field name then it will be blank. </description> </attribute> <attribute> <name>format</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>java.text.Format</type> <description> Optional instance of a Format implementation to use to format the field attribute. This attribute is ignored if you do not specify a value for the field attribute. Basically, the format(Object) method is called, and the result is what is put on the page. </description> </attribute> <attribute> <name>nullValue</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> Optional replacement value for NULLs. If the the value of the field is null, then this text will be shown in the cell. If nullValue is not specified and a null occurs, the cell will simply be blank. If a format is specified, it is NOT applied to the nullValue. </description> </attribute> </tag> <tag> <name>grid-detail</name> <tag-class>com.cbase.web.jsp.tables.GridDetailsTag</tag-class> <tei-class>com.cbase.web.jsp.tables.GridDetailsTagExtraInfo</tei-class> <body-content>JSP</body-content> <description> Contains JSP code that will be displayed on a line below the main line of each grid row. Supports the ability to be hidden, as well as the ability to toggle visibility. </description> <attribute> <name>idBase</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> Optional base name for the detail lines. If not specified then the enclosing grid tag's ID will be used with "--detail" appended. </description> </attribute> <attribute> <name>style</name> <required>false</required> <description> Optional CSS class name to be assigned to the contents of the tag. </description> </attribute> <attribute> <name>collapsible</name> <required>false</required> <description> If collapsible is true then a toggle will be displayed in the first column of each row that allows the user to hide and unhide the details. showDetailWidget is the URL of a graphic to show when the details are hidden. When clicked the details will be unhidden. hideDetailWidget is the URL of a graphic to show when the details are visible. When clicked the details will be hidden. collapsible is false by default. If either showDetailWidget or hideDetailWidget are not specified then the text "show" and "hide" will be used instead of a graphic. </description> </attribute> <attribute> <name>toggleDisplayMethod</name> <required>false</required> <description> If collapsible is true then toggleDisplayMethod must be the name of a javascript function that takes an element ID as its sole parameter. The function will be responsible for toggling the display attribute of the grid-detail contents. An example function would be: <![CDATA[ toggleDisplayMethod := toggleBlockDisplay function toggleBlockDisplay(target) { toggleDisplay(target, 'block'); } function toggleDisplay(target, normDisplayMode) { var e = document.getElementById(target); if(e == null) { return; } var display = '' + e.style.display; if(display != '' && display != 'none') { display = 'none'; } else { display = normDisplayMode; } e.style.display = display; } ]]> </description> </attribute> <attribute> <name>switchDisplayMethod</name> <required>false</required> <description> If collapsible is true then switchDisplayMethod must be the name of a javascript function that takes two element IDs as its sole parameters. The function will be responsible for ensuring that only one of the two elements is visible. If the first element is currently visible then it must be made invisible and vice-versa. An example function would be: <![CDATA[ switchDisplayMethod := switchDisplayBlock function switchDisplayBlock(target1, target2) { switchDisplay(target1, target2, 'block'); } function switchDisplay(target1, target2, display) { var t1 = document.getElementById(target1); var t2 = document.getElementById(target2); if(t1 != null && t2 != null) { var display1 = '' + t1.style.display; var display2 = '' + t2.style.display; if(display1 != '' && display1 != 'none') { // target1 is showing so, hide it and show target2 t1.style.display = 'none'; t2.style.display = display; } else if(display2 != '' && display2 != 'none') { // target1 wasn't displayed, but target2 is, so hide // target2 and show target1 t1.style.display = display; t2.style.display = 'none'; } } } ]]> </description> </attribute> <attribute> <name>actuatorStyle</name> <required>false</required> <description> Name of the CSS class to apply to the actuator. </description> </attribute> <attribute> <name>showDetailWidget</name> <required>false</required> <description> URL of the widget to display when the details for a row are visible. </description> </attribute> <attribute> <name>hideDetailWidget</name> <required>false</required> <description> URL of the widget to display when the details for a row are not visible. </description> </attribute> <attribute> <name>hidden</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description> If hidden is true then the details for each row will not be visible when the grid is first rendered. If collapsible is false when hidden is true, the user will not ever be able to see the contents of the details. </description> </attribute> </tag> </taglib> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]