struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Halil Ağın" <halil.a...@gmail.com>
Subject Re: struts2 validation, tiles definition in input result type, problem!
Date Fri, 25 Jul 2008 09:21:30 GMT
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 <halil.agin@gmail.com>:

> 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 <newton.dave@yahoo.com>
> wrote:
>
>> Your action is submitting to "ProjectStatus"; is that action defined?
>>
>> Dave
>>
>>
>> --- On Thu, 7/24/08, Halil Ağın <halil.agin@gmail.com> wrote:
>>
>> > From: Halil Ağın <halil.agin@gmail.com>
>> > 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: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message