I'm no expert on Struts, so this is a bit of stab in the dark. I notice the
default action config in AppFuse omits the "method" attribute. Have you
tried:

      <action name="uploadPhoto" class="
com.getrolling.cis.webapp.action.PhotoAction">
           <interceptor-ref name="fileUploadStack"/>
           <result name="input">/WEB-INF/pages/photoForm.jsp</result>
           <result name="success">/WEB-INF/pages/photoForm.jsp</result>
           <result name="cancel" type="redirect">photos.html</result>
       </action>

Mike

On 11/5/07, Daniel Kibler <[EMAIL PROTECTED]> wrote:
>
>
> Of course, I should have noted Appfuse2 - Struts2
>
> Daniel Kibler wrote:
> >
> > I have another baffling problem.:confused:
> >
> > I'm trying to add file upload capability to a data form page. I added a
> > new form to the page based on the appfuse file upload jsp. I also edited
> > the action to extend org.appfuse.webapp.action.FileUploadAction,
> > overriding the upload() method and included the @Override annotation.
> >
> > Page loads fine, browse button works, but when click the Upload button I
> > get the NoSuchMethodException below telling it can't find the upload().
> > Everything seem is order. What's going on?
> >
> > The signatures:
> >
> > public class PhotoAction extends FileUploadAction implements Preparable
> {
> > ...
> >       @Override
> >       public String upload() throws Exception {
> >
> >
> > The jsp form:
> >
> > <s:form action="uploadPhoto" enctype="multipart/form-data" method="post"
> > validate="true" id="uploadForm">
> >     <li class="info">
> >         <fmt:message key="upload.message"/>
> >     </li>
> >     <s:file name="file" label="%{getText('photo.file')}" cssClass="text
> > file" required="true"/>
> >     <li class="buttonBar bottom">
> >         <s:submit key="button.upload" name="upload" cssClass="button"/>
> >         <input type="button" value="<fmt:message key="button.cancel"/>"
> > class="button"
> >             onclick="this.form.onsubmit = null;
> > location.href='photoEdit.html'"/>
> >     </li>
> > </s:form>
> >
> > struts.xml
> >
> >         <action name="uploadPhoto"
> > class="com.getrolling.cis.webapp.action.PhotoAction" method="upload" >
> >             <interceptor-ref name="fileUploadStack"/>
> >             <result name="input">/WEB-INF/pages/photoForm.jsp</result>
> >             <result name="success">/WEB-INF/pages/photoForm.jsp</result>
> >             <result name="cancel" type="redirect">photos.html</result>
> >         </action>
> >
> > and finally the exception:
> >
> > javax.servlet.ServletException: java.lang.NoSuchMethodException:
> > com.getrolling.cis.webapp.action.PhotoAction.upload()
> >       at
> > org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java
> :515)
> >       at
> > org.apache.struts2.dispatcher.FilterDispatcher.doFilter(
> FilterDispatcher.java:419)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > org.appfuse.webapp.filter.StaticFilter.doFilterInternal(
> StaticFilter.java:106)
> >       at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(
> OncePerRequestFilter.java:75)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(
> PageFilter.java:118)
> >       at
> > com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(
> PageFilter.java:52)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(
> ActionContextCleanUp.java:99)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java
> :164)
> >       at
> > org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
> >       at
> > org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(
> UrlRewriter.java:90)
> >       at
> > org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(
> UrlRewriteFilter.java:406)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > org.displaytag.filter.ResponseOverrideFilter.doFilter(
> ResponseOverrideFilter.java:125)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > net.sf.ehcache.constructs.web.filter.GzipFilter.doFilter(GzipFilter.java
> :75)
> >       at net.sf.ehcache.constructs.web.filter.Filter.doFilter(
> Filter.java:92)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > org.appfuse.webapp.filter.LocaleFilter.doFilterInternal(
> LocaleFilter.java:74)
> >       at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(
> OncePerRequestFilter.java:75)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > com.opensymphony.clickstream.ClickstreamFilter.doFilter(
> ClickstreamFilter.java:42)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> >
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal
> (OpenSessionInViewFilter.java:198)
> >       at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(
> OncePerRequestFilter.java:75)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(
> FilterChainProxy.java:265)
> >       at
> > org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(
> FilterSecurityInterceptor.java:107)
> >       at
> > org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(
> FilterSecurityInterceptor.java:72)
> >       at
> > org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(
> FilterChainProxy.java:275)
> >       at
> > org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(
> ExceptionTranslationFilter.java:166)
> >       at
> > org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(
> FilterChainProxy.java:275)
> >       at
> > org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter
> (AnonymousProcessingFilter.java:125)
> >       at
> > org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(
> FilterChainProxy.java:275)
> >       at
> > org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(
> RememberMeProcessingFilter.java:142)
> >       at
> > org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(
> FilterChainProxy.java:275)
> >       at
> >
> org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter
> (SecurityContextHolderAwareRequestFilter.java:81)
> >       at
> > org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(
> FilterChainProxy.java:275)
> >       at
> > org.acegisecurity.ui.AbstractProcessingFilter.doFilter(
> AbstractProcessingFilter.java:271)
> >       at
> > org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(
> FilterChainProxy.java:275)
> >       at
> > org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(
> HttpSessionContextIntegrationFilter.java:249)
> >       at
> > org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(
> FilterChainProxy.java:275)
> >       at
> > org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java
> :149)
> >       at
> > org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java
> :98)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(
> CharacterEncodingFilter.java:96)
> >       at
> > org.springframework.web.filter.OncePerRequestFilter.doFilter(
> OncePerRequestFilter.java:75)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(
> ServletHandler.java:1084)
> >       at
> > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
> >       at
> > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java
> :216)
> >       at
> > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >       at
> > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> >       at org.mortbay.jetty.webapp.WebAppContext.handle(
> WebAppContext.java:405)
> >       at
> > org.mortbay.jetty.handler.ContextHandlerCollection.handle(
> ContextHandlerCollection.java:211)
> >       at
> > org.mortbay.jetty.handler.HandlerCollection.handle(
> HandlerCollection.java:114)
> >       at
> > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> >       at org.mortbay.jetty.Server.handle(Server.java:313)
> >       at
> > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
> >       at
> > org.mortbay.jetty.HttpConnection$RequestHandler.content(
> HttpConnection.java:844)
> >       at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
> >       at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java
> :211)
> >       at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java
> :381)
> >       at
> > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java
> :396)
> >       at
> > org.mortbay.thread.BoundedThreadPool$PoolThread.run(
> BoundedThreadPool.java:442)
> > Caused by: java.lang.NoSuchMethodException:
> > com.getrolling.cis.webapp.action.PhotoAction.upload()
> >       at java.lang.Class.getMethod(Class.java:1605)
> >       at
> >
> org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod
> (AnnotationValidationInterceptor.java:55)
> >       at
> >
> org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept
> (AnnotationValidationInterceptor.java:41)
> >       at
> > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> MethodFilterInterceptor.java:86)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept
> (ConversionErrorInterceptor.java:123)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(
> ParametersInterceptor.java:167)
> >       at
> > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> MethodFilterInterceptor.java:86)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> >
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(
> StaticParametersInterceptor.java:105)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > org.apache.struts2.interceptor.CheckboxInterceptor.intercept(
> CheckboxInterceptor.java:83)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > org.apache.struts2.interceptor.FileUploadInterceptor.intercept(
> FileUploadInterceptor.java:268)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(
> ModelDrivenInterceptor.java:74)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> >
> com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept
> (ScopedModelDrivenInterceptor.java:127)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(
> ProfilingActivationInterceptor.java:107)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(
> DebuggingInterceptor.java:206)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(
> ChainingInterceptor.java:115)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(
> I18nInterceptor.java:143)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(
> PrepareInterceptor.java:121)
> >       at
> > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> MethodFilterInterceptor.java:86)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(
> ServletConfigInterceptor.java:170)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(
> AliasInterceptor.java:123)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> >
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(
> ExceptionMappingInterceptor.java:176)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > org.apache.struts2.interceptor.FileUploadInterceptor.intercept(
> FileUploadInterceptor.java:268)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:224)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(
> DefaultActionInvocation.java:223)
> >       at
> > com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(
> UtilTimerStack.java:455)
> >       at
> > com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:221)
> >       at
> > org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java
> :50)
> >       at
> > org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java
> :504)
> >       ... 66 more
> >
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/NoSuchMethodException---but-the-method%27s-there-tf4749360s2369.html#a13581780
> Sent from the AppFuse - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to