Sorry i amde a typo in the previous mail, ProjectStatus-validation,xml should be replaced with ProjectStatusAction-validation,xml
2008/7/25 Halil Ağın <[EMAIL PROTECTED]>: > Hello Dave; > > Yes you are right, There is no "ProjectStatus" action defined. > Now, i change the form action definition to > > <s:form action="ProjectStatus_showAddPage" > .. > > and it is ok. validation works, but there is still a problem, > > When i request the > http://localhost:8080/TVQ/ProjectStatus_showAddPage.action (showAddPage > function is defined in ProjectStatus action class) > > it shows the AddPage.jsp (which is expected), but it shows all the > validation messages at first page load which is not expected. > > The correct scenario is that it should show the validation messages after i > press the add button. > > > Here is my jsp content and struts.xml content, respectively (I do not > include tiles definition, they works, morover, they are not needed to > analyze this problem, i think :) ) > > There is also a validation file named ProjectStatus-validation,xml in the > directory where ProjectStatusAction.java resides in. > > ===========start:AddPage.jsp============= > <s:form action="ProjectStatus_showAddPage" validate="true" > > > <s:fielderror /> > > <jsp:include page="AddUpdateTemplate.jsp"/> > <br/> > > <table> > <tr><td colspan="2"><s:submit method="add" value="Add" /></td></tr> > </table> > > </s:form> > > ===========end :AddPage ============= > > > > ===========start:struts.xml============= > <action name="ProjectStatus_*" > > class="tr.com.portakalteknoloji.action.projectstatus.ProjectStatusAction" > method="{1}" > > > <result name="{1}" type="tiles" >tvq.projectstatus.{1}</result> > <result name="input" type="tiles" > >tvq.projectstatus.{1}</result> > <result name="ADDSUCCEED" > type="redirect">/ProjectStatus_list.action</result> > > </action> > ===========end :struts.xml ============= > > > > > > > Regards, > > > -Halil AGIN > > > > On Thu, Jul 24, 2008 at 6:22 PM, Dave Newton <[EMAIL PROTECTED]> > wrote: > >> Your action is submitting to "ProjectStatus"; is that action defined? >> >> Dave >> >> >> --- On Thu, 7/24/08, Halil Ağın <[EMAIL PROTECTED]> wrote: >> >> > From: Halil Ağın <[EMAIL PROTECTED]> >> > Subject: struts2 validation, tiles definition in input result type, >> problem! >> > To: user@struts.apache.org >> > Date: Thursday, July 24, 2008, 10:58 AM >> > Hello List; >> > >> > I am trying to implement validation in struts2. >> > >> > My action is as follow: >> > >> > <action name="ProjectStatus_*" >> > >> > >> class="tr.com.portakalteknoloji.action.projectstatus.ProjectStatusAction" >> > method="{1}" > >> > >> > <result name="{1}" >> > type="tiles" >> > >tvq.projectstatus.{1}</result> >> > <result name="input" >> > type="tiles" >> > >tvq.projectstatus.{1}</result> >> > <result name="error" >> > type="tiles">tvq.projectstatus.{1}</result> >> > >> > <result name="ADDSUCCEED" >> > type="redirect">/ProjectStatus_list.action</result> >> > </action> >> > >> > >> > >> > Since when validation process returns false, i want struts >> > to show the same >> > page. I search the web, and saw some solution like above. >> > But, when i try to >> > implement, i could not succeed. >> > >> > Here are my tiles definitions: >> > >> > <definition >> > name="tvq.projectstatus.showAddPage" >> > extends="tvq.template.default"> >> > <put-attribute name="title" >> > value="Add A Project Status" /> >> > <put-attribute name="content" >> > value="/jsp/projectstatus/AddPage.jsp" >> > /> >> > </definition> >> > >> > <definition >> > name="tvq.projectstatus.ListPage" >> > extends="tvq.template.default"> >> > <put-attribute name="title" >> > value="Add A Project Status" /> >> > <put-attribute name="content" >> > value="/jsp/projectstatus/ListPage.jsp" /> >> > </definition> >> > >> > <definition name="tvq.projectstatus.list" >> > extends="tvq.template.default"> >> > <put-attribute name="title" >> > value="Add A Project Status" /> >> > <put-attribute name="content" >> > value="/jsp/projectstatus/ListPage.jsp" /> >> > </definition> >> > >> > >> > >> > I call the page ass follows : >> > http://localhost:8080/TVQ/ProjectStatus_showAddPage.action >> > >> > (the ProjectStatusAction.java has showAddPage, list, and >> > add functions and >> > these functions returns the correct strings.) >> > >> > >> > Then, struts looks the action definition and it finds >> > showAddPage function >> > in ProjectStatus. >> > >> > In result list, there is tvq.projectstatus.showAddPage, and >> > i have this >> > definition in my tiles.xml. >> > >> > Therefore, it shows the page. The problem occures after i >> > press the add >> > button in tvq.projectstatus.showAddPage. >> > >> > here is the content of the >> > tvq.projectstatus.showAddPage(meanly,/jsp/projectstatus/AddPage.jsp) >> > >> > >> > >> > >> > <s:form action="ProjectStatus" >> > validate="true" > >> > >> > <s:fielderror /> >> > >> > <jsp:include page="AddUpdateTemplate.jsp"/> >> > <br/> >> > >> > <table> >> > <tr><td colspan="2"><s:submit >> > method="add" value="Add" >> > /></td></tr> >> > </table> >> > >> > </s:form> >> > >> > >> > >> > >> > And i have a required field validator on a field in my >> > form(this field is >> > listed in AddUpdateTemplate.jsp) >> > >> > >> > ProjectStatus action has add function which returns the >> > "ADDSUCCEED" string >> > on success. >> > >> > >> > When i press the add button without filling the required >> > field, there occure >> > a validation error(which is expected) >> > >> > At this level, i expect struts that it enters the input >> > result which is >> > defined in my action as a result. >> > >> > Here is the result definition. >> > >> > <result name="input" type="tiles" >> > >tvq.projectstatus.{1}</result> >> > >> > >> > I expect the struts to enter in input result, and it does. >> > but it cannot >> > produces the tiles definition, it leaves {1} as empty and >> > produce >> > "tvq.projectstatus." unlike >> > "tvq.projectstatus.showAddPage". >> > >> > What is the problem, i know i am doing something wrong, i >> > read the book >> > "struts2 in action", and searched the web, but >> > could not find such an >> > example. Meanly, i am using method action, tiles and >> > validation together, i >> > could not find such an example. >> > >> > >> > Please help me, >> > >> > >> > Thanks in advance, >> > >> > >> > -Halil Agin >> > >> > >> > the stack trace is below (i am using global exception >> > handler, therefore i >> > copied the html content and paste it here, you may want the >> > output of error >> > console, but please be sure that this is the exact error. i >> > see this error >> > in the console too) >> > >> > >> > Error Message >> > >> > tvq.projectstatus. >> > ------------------------------ >> > Technical Details >> > >> > org.apache.tiles.definition.NoSuchDefinitionException: >> > tvq.projectstatus. at >> > >> org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:394) >> > at >> > >> org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:370) >> > at >> > >> org.apache.struts2.views.tiles.TilesResult.doExecute(TilesResult.java:105) >> > at >> > >> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:355) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:259) >> > at >> > >> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:248) >> > at >> > >> org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:49) >> > at >> > >> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:124) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:170) >> > at >> > >> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:170) >> > at >> > >> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:104) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:84) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:208) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:88) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:130) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:137) >> > at >> > >> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:130) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:230) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation$1.doProfiling(DefaultActionInvocation.java:229) >> > at >> > >> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:456) >> > at >> > >> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:227) >> > at >> > >> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) >> > at >> > >> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:477) >> > at >> > >> org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:467) >> > at >> > >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> > at >> > >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> > at >> > >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >> > at >> > >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) >> > at >> > >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) >> > at >> > >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >> > at >> > >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >> > at >> > >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) >> > at >> > >> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) >> > at >> > >> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) >> > at >> > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) >> > at java.lang.Thread.run(Thread.java:619) >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >