Hi Yong,
This issue has come up before on the bridges-dev list and also an JIRA issue
for created:
http://issues.apache.org/jira/browse/PB-41
The current solution is very simple (as I also commented in PB-41).
define "org.apache.struts.taglib.tiles.CompContext" as render-context attribute
in your struts-portlet-config.xml:
<config>
<render-context>
<attribute name="org.apache.struts.taglib.tiles.CompContext"/>
</render-context>
...
</config>
As you can see in PB-41, I'm also working on a transparent solution which will
not need the above configuration anymore.
That solution is mostly ready but pending a little more testing before I'll
commit it.
I plan to have that included in a soon to be released 1.0.1 version of bridges.
HTH,
Ate
yong wrote:
I am trying to get a simple struts/tiles application working in jetspeed 2
using struts bridge. I would greatly appreciate any insight why I keep
getting this error. Some of my key files:
portlet.xml
---------------
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app id="singles"
xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
<portlet id="strutsexample">
<portlet-name>strutsexample</portlet-name>
<display-name>struts tiles example</display-name>
<portlet-class>org.apache.portals.bridges.struts.StrutsPortlet</portlet-class>
<init-param>
<name>ServletContextProvider</name>
<value>org.apache.jetspeed.portlet.ServletContextProviderImpl</value>
</init-param>
<init-param>
<name>ViewPage</name>
<value>/do/welcome</value>
</init-param>
<expiration-cache>-1</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>HELP</portlet-mode>
</supports>
<portlet-info>
<title>struts</title>
<keywords>struts</keywords>
</portlet-info>
</portlet>
</portlet-app>
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>
<data-sources />
<form-beans />
<global-exceptions />
<global-forwards >
<forward
name="welcome"
path="/do/welcome"
redirect="true" />
</global-forwards>
<action-mappings >
<action path="/welcome"
type="de.laliluna.tutorials.library.struts.action.WelcomeAction">
<forward name="showWelcome" path="page.welcome" />
</action>
<action path="/bookList"
type="de.laliluna.tutorials.library.struts.action.BookListAction">
<forward name="showBookList" path="page.booklist" />
</action>
<action path="/navigation"
type="de.laliluna.tutorials.library.struts.action.NavigationAction">
<forward name="showNavigation" path="/jsp/navigation.jsp" />
</action>
</action-mappings>
<!--
<controller
processorClass="org.apache.struts.tiles.TilesRequestProcessor"
bufferSize="4096" debug="0" />
-->
<controller pagePattern="$M$P" inputForward="false"
processorClass="org.apache.portals.bridges.struts.PortletTilesRequestProcessor"/>
<message-resources
parameter="de.laliluna.tutorials.library.struts.ApplicationResources" />
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config"
value="/WEB-INF/tiles-defs.xml" />
<set-property property="moduleAware" value="true" />
<set-property property="definitions-parser-validate" value="true" />
</plug-in>
</struts-config>
struts-portlet-config.xml
---------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<config>
<render-context>
<attribute name="errors"/>
<attribute name="message"/>
</render-context>
<portlet-url-type>
<action path="/do/welcome"/>
<action path="/do/bookList"/>
<action path="/do/navigation"/>
<resource path="/images/"/>
</portlet-url-type>
</config>
tiles-defs.xml
-----------------
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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>
<!-- Base Tiles Definition -->
<definition name="base.definition" path="/jsp/siteLayout.jsp">
<put name="header" value="/jsp/header.jsp" />
<put name="navigation" value="/do/navigation" />
<put name="footer" value="/jsp/footer.jsp" />
</definition>
<!-- Tiles Definition of welcome page -->
<definition name="page.welcome" extends="base.definition">
<put name="title" value="Welcome page" />
<put name="body" value="/jsp/index.jsp" />
</definition>
<!-- Tiles Definition of BookList -->
<definition name="page.booklist" extends="base.definition">
<put name="title" value="Book list page" />
<put name="body" value="/jsp/bookList.jsp" />
</definition>
</tiles-definitions>
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>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.portals.bridges.struts.PortletServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>JetspeedContainer</servlet-name>
<display-name>Jetspeed Container</display-name>
<description>MVC Servlet for Jetspeed Portlet
Applications</description>
<servlet-class>org.apache.jetspeed.container.JetspeedContainerServlet</servlet-class>
<init-param>
<param-name>contextName</param-name>
<param-value>strutsexample</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JetspeedContainer</servlet-name>
<url-pattern>/container/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/do/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>500</session-timeout>
</session-config>
<!-- Default files and Error pages for standard HTTP error codes -->
<env-entry>
<env-entry-name>maxListLength</env-entry-name>
<env-entry-value>100</env-entry-value>
<env-entry-type>java.lang.Integer</env-entry-type>
</env-entry>
</web-app>
strutsexample.psml
--------------------------
<?xml version="1.0" encoding="UTF-8"?>
<page id="strutsexample">
<defaults
skin="orange"
layout-decorator="tigris"
portlet-decorator="tigris"
/>
<title>The Struts/Tiles Example Porlet</title>
<metadata name="title" xml:lang="en">The Struts/Tiles Example
Portlet</metadata>
<fragment id="strutsexample" type="layout"
name="jetspeed-layouts::VelocityOneColumn">
<fragment id="singles-1" type="portlet"
name="strutsexample::strutsexample">
<property layout="OneColumn" name="row" value="0" />
<property layout="OneColumn" name="column" value="0" />
</fragment>
</fragment>
<security-constraints>
<security-constraints-ref>public-view</security-constraints-ref>
</security-constraints>
</page>
navigation.jsp
------------------
<%@ page language="java"%>
<%@ taglib uri="http://portals.apache.org/bridges/struts/tags-portlet-html"
prefix="html" %>
Navigation page
<br />
<html:link action="welcome"> Goto welcome page </html:link>
<br />
<html:link action="bookList"> Goto book list page </html:link>
<br />
<br />
When I click on any <html:link> on the navigation page, I got this error. It
seems the componet context isn't set into the pageContext.
Error - tag.getAsString : component context is not defined. Check tag syntax
org.apache.struts.taglib.tiles.GetAttributeTag.doEndTag(GetAttributeTag.java:155)
org.apache.jsp.jsp.siteLayout_jsp._jspx_meth_tiles_getAsString_0(org.apache.jsp.jsp.siteLayout_jsp:176)
org.apache.jsp.jsp.siteLayout_jsp._jspx_meth_html_html_0(org.apache.jsp.jsp.siteLayout_jsp:108)
org.apache.jsp.jsp.siteLayout_jsp._jspService(org.apache.jsp.jsp.siteLayout_jsp:73)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
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)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
org.apache.portals.bridges.struts.PortletServletRequestDispatcher.invoke(PortletServletRequestDispatcher.java:128)
org.apache.portals.bridges.struts.PortletServletRequestDispatcher.include(PortletServletRequestDispatcher.java:146)
org.apache.portals.bridges.struts.PortletServlet.performActionRenderRequest(PortletServlet.java:179)
org.apache.portals.bridges.struts.PortletTilesRequestProcessor.processRoles(PortletTilesRequestProcessor.java:57)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:197)
org.apache.portals.bridges.struts.PortletTilesRequestProcessor.process(PortletTilesRequestProcessor.java:50)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
org.apache.portals.bridges.struts.StrutsPortlet.processRequest(StrutsPortlet.java:375)
org.apache.portals.bridges.struts.StrutsPortlet.doView(StrutsPortlet.java:274)
javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:247)
javax.portlet.GenericPortlet.render(GenericPortlet.java:175)
org.apache.jetspeed.factory.JetspeedPortletInstance.render(JetspeedPortletInstance.java:102)
org.apache.jetspeed.container.JetspeedContainerServlet.doGet(JetspeedContainerServlet.java:230)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
org.apache.jetspeed.container.invoker.ServletPortletInvoker.invoke(ServletPortletInvoker.java:213)
org.apache.jetspeed.container.invoker.ServletPortletInvoker.render(ServletPortletInvoker.java:125)
org.apache.pluto.PortletContainerImpl.renderPortlet(PortletContainerImpl.java:119)
org.apache.jetspeed.container.JetspeedPortletContainerWrapper.renderPortlet(JetspeedPortletContainerWrapper.java:120)
org.apache.jetspeed.aggregator.impl.RenderingJobImpl.execute(RenderingJobImpl.java:120)
org.apache.jetspeed.aggregator.impl.PortletRendererImpl.renderNow(PortletRendererImpl.java:110)
org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.aggregateAndRender(PageAggregatorImpl.java:199)
org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.aggregateAndRender(PageAggregatorImpl.java:182)
org.apache.jetspeed.aggregator.impl.PageAggregatorImpl.build(PageAggregatorImpl.java:106)
org.apache.jetspeed.aggregator.AggregatorValve.invoke(AggregatorValve.java:48)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.pipeline.valve.impl.ActionValveImpl.invoke(ActionValveImpl.java:132)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.container.ContainerValve.invoke(ContainerValve.java:76)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.decoration.DecorationValve.invoke(DecorationValve.java:100)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.profiler.impl.ProfilerValveImpl.invoke(ProfilerValveImpl.java:179)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.security.impl.LoginValidationValveImpl.invoke(LoginValidationValveImpl.java:143)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.security.impl.PasswordCredentialValveImpl.invoke(PasswordCredentialValveImpl.java:148)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.localization.impl.LocalizationValveImpl.invoke(LocalizationValveImpl.java:168)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.security.impl.AbstractSecurityValve$1.run(AbstractSecurityValve.java:117)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:437)
org.apache.jetspeed.security.impl.AbstractSecurityValve.invoke(AbstractSecurityValve.java:111)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.container.url.impl.PortalURLValveImpl.invoke(PortalURLValveImpl.java:55)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.capabilities.impl.CapabilityValveImpl.invoke(CapabilityValveImpl.java:128)
org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
org.apache.jetspeed.pipeline.JetspeedPipeline.invoke(JetspeedPipeline.java:185)
org.apache.jetspeed.engine.JetspeedEngine.service(JetspeedEngine.java:231)
org.apache.jetspeed.engine.JetspeedServlet.doGet(JetspeedServlet.java:226)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
java.lang.Thread.run(Thread.java:534)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]