Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

JSP : Tiles Error �tag.getAsString� : component context is not defined

843836Jan 16 2004 — edited Feb 15 2004
JSP : Tiles Error �tag.getAsString� : component context is not defined

I�m working with Struts 1.1 and Tiles, under Tomcat 5.0.16

My application works fine using Struts 1.1 alone, however, when attempting to run the application in a �Tiles� environment, I get an error:




javax.servlet.jsp.JspException: Error - tag.getAsString : component context is not defined. Check tag syntax



I have �defined� this in my �tiles-defs.xml� file, and as far as I can tell, everything else is configured properly (I have looked over the included Struts document examples, and others on the web, and I seem to have everything configured identically).

What am I missing???


I have created a series of �mostly� empty JSP files, for simplicity sake.

JSP FILES:
- header.jsp
- footer.jsp
- menu.jsp
- rootLayout.jsp
- user.jsp
- show_user.jsp
- error.jsp
- defaultContentPage.jsp


All JSP files contain:

<%@ taglib uri="/WEB-INF/lib/struts-tiles.tld" prefix="tiles" %>

and


<title>
<tiles:getAsString name="title"/>
</title>


My �tiles-defs.xml�: =================================================

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">

<tiles-definitions>
<!-- ================ RootLayout ======================= -->
<definition name=".root.layout" path="/jsp/rootLayout.jsp" >
<put name="title" value="Default title"/>
<put name="header" value="/jsp/header.jsp"/>
<put name="menu" value="/jsp/menu.jsp"/>
<put name="content" value="/jsp/defaultContentPage.jsp"/>
<put name="footer" value="/jsp/footer.jsp"/>
</definition>

<!-- ================ Extentions ======================= -->
<!-- User -->
<definition name=".view.user" extends=".root.layout">
<put name="title" value="Welcome to the User Form."/>
<put name="content" value="/jsp/user.jsp"/>
</definition >
<!-- Save -->
<definition name=".view.save" extends=".root.layout">
<put name="title" value="Welcome to the Show User Form."/>
<put name="content" value="/jsp/show_user.jsp"/>
</definition >
<!-- Error -->
<definition name=".view.error" extends=".root.layout">
<put name="title" value="Error Message."/>
<put name="content" value="/jsp/error.jsp"/>
</definition >
</tiles-definitions>


My �struts-config.xml�: ==============================================

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">


<struts-config>
<!-- ========== FormBeans =================================== -->
<form-beans>
<form-bean name="userForm" type="biz.seamrog.strutstest.model.state.UserForm"/>
</form-beans>

<!-- ========== Action Mapping Definitions=================== -->
<action-mappings>
<!-- Action using normal forward syntax...
<action path="/user"
forward="/jsp/user.jsp">
</action>
-->
<!-- Action using a "Tiles" forward syntax...
The "forward" path mappings are defined in a file named
"../WEB-INF/tiles-defs.xml
-->
<action path="/user"
forward=".view.user">
</action>

<!-- Action using normal forward syntax...
<action path="/save"
type="biz.seamrog.strutstest.model.logic.SaveAction"
name="userForm" scope="request"
input="/jsp/user.jsp">
<forward name="success" path="/jsp/show_user.jsp"/>
<forward name="failure" path="/jsp/error.jsp"/>
</action>
-->
<!-- Tiles syntax -->
<action path="/save"
type="biz.seamrog.strutstest.model.logic.SaveAction"
name="userForm" scope="request"
input="/jsp/user.jsp">
<forward name="success" path=".view.show_user"/>
<forward name="failure" path=".view.error"/>
</action>
</action-mappings>

<!-- ============== Global Forwards ======================== -->
<global-forwards>
<!-- NOTE: paths with "." syntax are Tiles defined paths,
all other paths follow conventional "/path/to/file.jsp syntax
-->
<forward name="user" path=".view.user"/>
<forward name="show_user" path=".view.show_user"/>
<forward name="error" path=".view.error"/>
<forward name="cssBase" path="/stylesheets/common.css"/>
</global-forwards>

<!-- ============= Plug-ins =============== -->
<!-- Tiles Plug-in -->
<plug-in className="org.apache.struts.tiles.TilesPlugin" >
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
<set-property property="definitions-parser-validate" value="true" />
<set-property property="moduleAware" value="true" />
</plug-in>
</struts-config>


My �web.xml�: =====================================================

<?xml version="1.0" encoding="UTF-8"?>

<!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>
<servlet>
<!--
MyController extends org.apache.struts.action.ActionServlet

NOTE: The servlet could also be specified specifying the
default Struts ActonServlet...

<servlet-name>controller</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

...I have chosen to extend here just for practice sake.

-->
<!--
<servlet-name>MyController</servlet-name>
<servlet-class>biz.seamrog.strutstest.controller.MyController</servlet-class>
-->
<servlet-name>MyController</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!--
Point to Struts configuration file(s)
-->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<!-- Tiles config -->
<init-param>
<param-name>definitions-config</param-name>
<param-value>/WEB-INF/tiles-defs.xml</param-value>
</init-param>
<!-- This is the added Application parameter: -->
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResource</param-value>
</init-param>
<!-- end -->
<load-on-startup>5</load-on-startup>
</servlet>
<!--
All incoming requests that end in .do, send to MyController.
-->
<servlet-mapping>
<servlet-name>MyController</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!--
Send initial requests to the login page for this application
-->
<welcome-file-list>
<welcome-file>/jsp/user.jsp</welcome-file>
</welcome-file-list>
<!--
Make all of the necessary related Struts JSP custom tag libraries
available and define where to find them.
-->
<taglib>
<taglib-uri>/WEB-INF/lib/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/lib/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/lib/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/lib/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/lib/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/lib/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/lib/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/lib/struts-tiles.tld</taglib-location>
</taglib>
</web-app>


My �rootLayout.jsp�: ================================================

<%@page contentType="text/html"%>
<%@ taglib uri="/WEB-INF/lib/struts-tiles.tld" prefix="tiles" %>

<html>
<header>
<title>
<tiles:getAsString name="title" />
</title>
<body>
<tiles:get name="header"/>
<tiles:get name="menu"/> <tiles:get name="content"/>
<tiles:get name="footer"/>
</body>
</html>
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Mar 14 2004
Added on Jan 16 2004
3 comments
681 views