Back Forum Reply New

Problems with Back button on sample detail page (In portlet)

If I search for a person and then select the detail for a person the Back button does nothing. I am running sample portlet. Does anyone have any ideas?

Mmm, what Portlet container are you using? Also, turn on quot;INFOquot; level logging, that should provide some usefull insight.

Erwin

.PoolTcpEndpoint.processSocket#40oolTcpEndpoint.java#58;527#41;
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt#40;LeaderFollowerWorkerThread.java#58;80#41;
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run#40;ThreadPool.java#58;684#41;
at java.lang.Thread.run#40;Thread.java#58;534#41;
ERROR --- ApplicationContext.log#40;662#41; | JetspeedContainerServlet#58; Error rendering portlet quot;nullquot;#58; java.lang.ClassCastException
java.lang.ClassCastException
at org..web.flow.execution.portlet.PortletRequestEvent.lt;initgt;#40ortletRequestEvent.java#58;70#41;
at org..web.flow.execution.portlet.PortletRequestEvent.lt;initgt;#40ortletRequestEvent.java#58;47#41;
at org..web.flow.execution.portlet.PortletFlowExecutionManager.createEvent#40ortletFlowExecutionManager.java#58;111#41;
at org..web.flow.execution.portlet.PortletFlowExecutionManager.handle#40ortletFlowExecutionManager.java#58;88#41;
at org..web.flow.portlet.PortletFlowController.handleRequestInternal#40ortletFlowController.java#58;119#41;
at org..web.portlet.support.AbstractController.handleRequest#40;AbstractController.java#58;156#41;
at org..web.portlet.DispatcherPortlet.doActionService#40;DispatcherPortlet.java#58;338#41;
at org..web.portlet.FrameworkPortlet.serviceWrapper#40;FrameworkPortlet.java#58;374#41;
at org..web.portlet.FrameworkPortlet.processAction#40;FrameworkPortlet.java#58;358#41;
at org.apache.jetspeed.factory.JetspeedPortletInstance.processAction#40;JetspeedPortletInstance.java#58;90#41;
at org.apache.jetspeed.container.JetspeedContainerServlet.doGet#40;JetspeedContainerServlet.java#58;215#41;
at org.apache.jetspeed.container.JetspeedContainerServlet.doPost#40;JetspeedContainerServlet.java#58;289#41;
at javax.servlet.from.fromServlet.service#40;fromServlet.java#58;709#41;
at javax.servlet.from.fromServlet.service#40;fromServlet.java#58;802#41;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter#40;ApplicationFilterChain.java#58;252#41;
at org.apache.catalina.core.ApplicationFilterChain.doFilter#40;ApplicationFilterChain.java#58;173#41;
at org.apache.catalina.core.ApplicationDispatcher.invoke#40;ApplicationDispatcher.java#58;672#41;
at org.apache.catalina.core.ApplicationDispatcher.doInclude#40;ApplicationDispatcher.java#58;574#41;
at org.apache.catalina.core.ApplicationDispatcher.include#40;ApplicationDispatcher.java#58;499#41;
at org.apache.jetspeed.container.invoker.ServletPortletInvoker.invoke#40;ServletPortletInvoker.java#58;212#41;
at org.apache.jetspeed.container.invoker.ServletPortletInvoker.action#40;ServletPortletInvoker.java#58;133#41;
at sun.reflect.NativeMethodAccessorImpl.invoke0#40;Native Method#41;
at sun.reflect.NativeMethodAccessorImpl.invoke#40;NativeMethodAccessorImpl.java#58;39#41;
at sun.reflect.DelegatingMethodAccessorImpl.invoke#40;DelegatingMethodAccessorImpl.java#58;25#41;
at java.lang.reflect.Method.invoke#40;Method.java#58;324#41;
at org..aop.support.AopUtils.invokeJoinpointUsingReflection#40;AopUtils.java#58;284#41;
at org..aop.framework.JdkDynamicAopProxy.invoke#40;JdkDynamicAopProxy.java#58;163#41;
at $Proxy9.action#40;Unknown Source#41;
at org.apache.pluto.PortletContainerImpl.processPortletAction#40ortletContainerImpl.java#58;150#41;
at org.apache.jetspeed.container.JetspeedPortletContainerWrapper.processPortletAction#40;JetspeedPortletContainerWrapper.java#58;100#41;
at org.apache.jetspeed.pipeline.valve.impl.ActionValveImpl.invoke#40;ActionValveImpl.java#58;75#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.container.ContainerValve.invoke#40;ContainerValve.java#58;76#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.profiler.impl.ProfilerValveImpl.invoke#40rofilerValveImpl.java#58;133#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.security.impl.PasswordCredentialValveImpl.invoke#40asswordCredentialValveImpl.java#58;139#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.security.impl.AbstractSecurityValve$1.run#40;AbstractSecurityValve.java#58;117#41;
at java.security.AccessController.doPrivileged#40;Native Method#41;
at javax.security.auth.Subject.doAsPrivileged#40;Subject.java#58;437#41;
at org.apache.jetspeed.security.impl.AbstractSecurityValve.invoke#40;AbstractSecurityValve.java#58;111#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.container.ucl.impl.PortaluclValveImpl.invoke#40ortaluclValveImpl.java#58;55#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.capabilities.impl.CapabilityValveImpl.invoke#40;CapabilityValveImpl.java#58;127#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.localization.impl.LocalizationValveImpl.invoke#40;LocalizationValveImpl.java#58;124#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invoke#40;JetspeedPipeline.java#58;185#41;
at org.apache.jetspeed.engine.AbstractEngine.service#40;AbstractEngine.java#58;264#41;
at org.apache.jetspeed.engine.JetspeedServlet.doGet#40;JetspeedServlet.java#58;225#41;
at org.apache.jetspeed.engine.JetspeedServlet.doPost#40;JetspeedServlet.java#58;252#41;
at javax.servlet.from.fromServlet.service#40;fromServlet.java#58;709#41;
at javax.servlet.from.fromServlet.service#40;fromServlet.java#58;802#41;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter#40;ApplicationFilterChain.java#58;252#41;
at org.apache.catalina.core.ApplicationFilterChain.doFilter#40;ApplicationFilterChain.java#58;173#41;
at org.apache.catalina.core.StandardWrapperValve.invoke#40;StandardWrapperValve.java#58;213#41;
at org.apache.catalina.core.StandardContextValve.invoke#40;StandardContextValve.java#58;178#41;
at org.apache.catalina.authenticator.AuthenticatorBase.invoke#40;AuthenticatorBase.java#58;407#41;
at org.apache.catalina.core.StandardHostValve.invoke#40;StandardHostValve.java#58;126#41;
at org.apache.catalina.valves.ErrorReportValve.invoke#40;ErrorReportValve.java#58;105#41;
at org.apache.catalina.core.StandardEngineValve.invoke#40;StandardEngineValve.java#58;107#41;
at org.apache.catalina.connector.CoyoteAdapter.service#40;CoyoteAdapter.java#58;148#41;
at org.apache.coyote.from11.from11Processor.process#40;from11Processor.java#58;825#41;
at org.apache.coyote.from11.from11Protocol$from11ConnectionHandler.processConnection#40;from11Protocol.java#58;743#41;
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket#40;PoolTcpEndpoint.java#58;527#41;
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt#40;LeaderFollowerWorkerThread.java#58;80#41;
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run#40;ThreadPool.java#58;684#41;
at java.lang.Thread.run#40;Thread.java#58;534#41;
java.lang.ClassCastException
at org..web.flow.execution.portlet.PortletRequestEvent.lt;initgt;#40;PortletRequestEvent.java#58;70#41;
at org..web.flow.execution.portlet.PortletRequestEvent.lt;initgt;#40;PortletRequestEvent.java#58;47#41;
at org..web.flow.execution.portlet.PortletFlowExecutionManager.createEvent#40;PortletFlowExecutionManager.java#58;111#41;
at org..web.flow.execution.portlet.PortletFlowExecutionManager.handle#40;PortletFlowExecutionManager.java#58;88#41;
at org..web.flow.portlet.PortletFlowController.handleRequestInternal#40;PortletFlowController.java#58;119#41;
at org..web.portlet.support.AbstractController.handleRequest#40;AbstractController.java#58;156#41;
at org..web.portlet.DispatcherPortlet.doActionService#40;DispatcherPortlet.java#58;338#41;
at org..web.portlet.FrameworkPortlet.serviceWrapper#40;FrameworkPortlet.java#58;374#41;
at org..web.portlet.FrameworkPortlet.processAction#40;FrameworkPortlet.java#58;358#41;
at org.apache.jetspeed.factory.JetspeedPortletInstance.processAction#40;JetspeedPortletInstance.java#58;90#41;
at org.apache.jetspeed.container.JetspeedContainerServlet.doGet#40;JetspeedContainerServlet.java#58;215#41;
at org.apache.jetspeed.container.JetspeedContainerServlet.doPost#40;JetspeedContainerServlet.java#58;289#41;
at javax.servlet.from.fromServlet.service#40;fromServlet.java#58;709#41;
at javax.servlet.from.fromServlet.service#40;fromServlet.java#58;802#41;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter#40;ApplicationFilterChain.java#58;252#41;
at org.apache.catalina.core.ApplicationFilterChain.doFilter#40;ApplicationFilterChain.java#58;173#41;
at org.apache.catalina.core.ApplicationDispatcher.invoke#40;ApplicationDispatcher.java#58;672#41;
at org.apache.catalina.core.ApplicationDispatcher.doInclude#40;ApplicationDispatcher.java#58;574#41;
at org.apache.catalina.core.ApplicationDispatcher.include#40;ApplicationDispatcher.java#58;499#41;
at org.apache.jetspeed.container.invoker.ServletPortletInvoker.invoke#40;ServletPortletInvoker.java#58;212#41;
at org.apache.jetspeed.container.invoker.ServletPortletInvoker.action#40;ServletPortletInvoker.java#58;133#41;
at sun.reflect.NativeMethodAccessorImpl.invoke0#40;Native Method#41;
at sun.reflect.NativeMethodAccessorImpl.invoke#40;NativeMethodAccessorImpl.java#58;39#41;
at sun.reflect.DelegatingMethodAccessorImpl.invoke#40;DelegatingMethodAccessorImpl.java#58;25#41;
at java.lang.reflect.Method.invoke#40;Method.java#58;324#41;
at org..aop.support.AopUtils.invokeJoinpointUsingReflection#40;AopUtils.java#58;284#41;
at org..aop.framework.JdkDynamicAopProxy.invoke#40;JdkDynamicAopProxy.java#58;163#41;
at $Proxy9.action#40;Unknown Source#41;
at org.apache.pluto.PortletContainerImpl.processPortletAction#40;PortletContainerImpl.java#58;150#41;
at org.apache.jetspeed.container.JetspeedPortletContainerWrapper.processPortletAction#40;JetspeedPortletContainerWrapper.java#58;100#41;
at org.apache.jetspeed.pipeline.valve.impl.ActionValveImpl.invoke#40;ActionValveImpl.java#58;75#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.container.ContainerValve.invoke#40;ContainerValve.java#58;76#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.profiler.impl.ProfilerValveImpl.invoke#40;ProfilerValveImpl.java#58;133#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.security.impl.PasswordCredentialValveImpl.invoke#40;PasswordCredentialValveImpl.java#58;139#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.security.impl.AbstractSecurityValve$1.run#40;AbstractSecurityValve.java#58;117#41;
at java.security.AccessController.doPrivileged#40;Native Method#41;
at javax.security.auth.Subject.doAsPrivileged#40;Subject.java#58;437#41;
at org.apache.jetspeed.security.impl.AbstractSecurityValve.invoke#40;AbstractSecurityValve.java#58;111#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.container.ucl.impl.PortaluclValveImpl.invoke#40;PortaluclValveImpl.java#58;55#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.capabilities.impl.CapabilityValveImpl.invoke#40;CapabilityValveImpl.java#58;127#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.localization.impl.LocalizationValveImpl.invoke#40;LocalizationValveImpl.java#58;124#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext#40;JetspeedPipeline.java#58;203#41;
at org.apache.jetspeed.pipeline.JetspeedPipeline.invoke#40;JetspeedPipeline.java#58;185#41;
at org.apache.jetspeed.engine.AbstractEngine.service#40;AbstractEngine.java#58;264#41;
at org.apache.jetspeed.engine.JetspeedServlet.doGet#40;JetspeedServlet.java#58;225#41;
at org.apache.jetspeed.engine.JetspeedServlet.doPost#40;JetspeedServlet.java#58;252#41;
at javax.servlet.from.fromServlet.service#40;fromServlet.java#58;709#41;
at javax.servlet.from.fromServlet.service#40;fromServlet.java#58;802#41;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter#40;ApplicationFilterChain.java#58;252#41;
at org.apache.catalina.core.ApplicationFilterChain.doFilter#40;ApplicationFilterChain.java#58;173#41;
at org.apache.catalina.core.StandardWrapperValve.invoke#40;StandardWrapperValve.java#58;213#41;
at org.apache.catalina.core.StandardContextValve.invoke#40;StandardContextValve.java#58;178#41;
at org.apache.catalina.authenticator.AuthenticatorBase.invoke#40;AuthenticatorBase.java#58;407#41;
at org.apache.catalina.core.StandardHostValve.invoke#40;StandardHostValve.java#58;126#41;
at org.apache.catalina.valves.ErrorReportValve.invoke#40;ErrorReportValve.java#58;105#41;
at org.apache.catalina.core.StandardEngineValve.invoke#40;StandardEngineValve.java#58;107#41;
at org.apache.catalina.connector.CoyoteAdapter.service#40;CoyoteAdapter.java#58;148#41;
at org.apache.coyote.from11.from11Processor.process#40;from11Processor.java#58;825#41;
at org.apache.coyote.from11.from11Protocol$from11ConnectionHandler.processConnection#40;from11Protocol.java#58;743#41;
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket#40;PoolTcpEndpoint.java#58;527#41;
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt#40;LeaderFollowerWorkerThread.java#58;80#41;
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run#40;ThreadPool.java#58;684#41;
at java.lang.Thread.run#40;Thread.java#58;534#41;looks to me that

searchForParameter(eventIdParameterName, parameterValueDelimiter)

returns String[] = {quot;backquot;,quot;selectquot;}

but code is:

// TODO multipart portlet request support -- not yet supported by Spring Portlet MVC
String eventId = (String)searchForParameter(eventIdParameterName, parameterValueDelimiter);

What's the problem here?

Is that what the comment means?

The comment does not relate to this, it regards file upload, which does not happen in the PhoneBook sample.
You are right that the result of searchForParameter() is apparently not a String. Did you verify that it was a String[] with quot;backquot; and quot;selectquot; in it?

I checked the /WEB-INF/jsp/portlet/person.Detail.view.jsp, and as far as I can see the value of _eventId should be either quot;backquot; or quot;selectquot;, but not both.

Maybe this is a bug in Jetspeed2?

Could you try to verify what is returned by the searchForParameter() call?

Erwin

I did verify {quot;backquot;,quot;selectquot;}. If it's a bug in jetspeed how can I confim. I can work with you over IM to put the relavent breakpoints in the debugger. Let me know and we can arrange it.

Well, the code is working nicely in Liferay.
Also, we're submitting the form

Code:
lt;FORM method=quot;postquot; name=quot;backFormquot; action=quot;lt;portlet#58;actionucl /gt;quot;gt;   lt;INPUT type=quot;hiddenquot; name=quot;_flowIdquot; value=quot;person.Detailquot; /gt;   lt;INPUT type=quot;hiddenquot; name=quot;_flowExecutionIdquot; value=quot;lt;%=request.getAttribute#40;quot;flowExecutionIdquot;#41; %gt;quot; /gt;   lt;INPUT type=quot;hiddenquot; name=quot;_eventIdquot; value=quot;backquot; /gt;
lt;/FORMgt;
So as far as I can see there is no way a second value can get into the _eventId, right?!?!

I'd say: put a breakpoint in the constructor of the PortletRequestEvent, and trace trough it to see where this second value is coming from. Maybe the PortletUtils.getParametersStartingWith() has a bug?

Erwin

the parameters are encoded when the link is encoded so yes there is a way for the parameter to get into the request. i.e: in jetspeed the ucl generated is:

lt;FORM method=quot;postquot; name=quot;backFormquot; action=quot;jetspeed/portal/_ns:YmRwLTIxfGMwfGQw/quot;gt;The ns contains the some stuff about state and parameters so that's how stuff could get into the next request.

I have found:

PortletUtils.getParametersStartingWith(request, null)

has a _eventId with a String[] = {quot;backquot;,quot;selectquot;}

In PortletUtils

String[] values = request.getParameterValues(paramName);

returns the 2 values

so that's where it is coming from. Any ideas?

Since PortletUtils.getParametersStartingWith() just uses the PortletRequest to get to the parameters, it seems like a Jetspeed2 bug, since they are the one implementing the PortletRequest interface.

I suggest you post the issue to the Jetspeed user/developer list.

Erwin

Doesn't that seem too fundemental to be a jetspeed bug. At some point encoding of the form ucl occured. Was that jetspeed as well. Is the problem that somewhere select should have been removed from the request attributes and not reach the render. Maybe the change J. Enrique made to carry the attribute from action to render broke it or something.

If you don't think that is that case what do you think would be the best way to present the issue on jetspeed forum?
¥
Back Forum Reply New