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:18:30 GMT
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