First of all this is the third time I have tried to respond as I keep trying to use ctrl+W to select a word while editing in this text area and closing the browser tab. (IDEA muscle memory).
Ok, so my first question is why have a Search action and then a separate SearchResults action? What does SearchResults do that Search does not do or vice versa? I would expect you would just submit the form to an action called Search, find stuff there and then dispatch to a results page from there. Your form can do a GET rather than POST and that will make things like the back button and refresh work better. Especially since technically you are not changing state a GET is appropriate. There may be a few things you can do: #1 - Show the user the search results with the error, asking them to try again. Dispatch to the search results page: <action name="search" class="com.foo.SearchAction"> <result type="tiles">searchResultPage</result> <result name="input" type="tiles">searchResultPage</result> <result name="error" type="tiles">searchResultPage</result> </action> #2 - Use the MessageStoreInterceptor and a querystring param to redirect to the original action With the MessageStoreInterceptor actionMessages, actionErrors and fieldErrors will be available after the redirect. Include a request param with the offending value and have your original action look for that to populate the search form. For anything to survive a redirect it has to go in the session (MessageStore) or be part of the redirect url. <action name="search" class="com.foo.SearchAction"> <result type="tiles">searchResultPage</result> <result name="input" type="redirect">${originalAction}?query=${query}</result> <result name="error" type="redirect">${originalAction}?query=${query}</result> </action> #3 - Remove the validation/workflow interceptors from the Search action and hand validate the value in your Search action method. If there is an error then return a String for the tiles result you want. This is not my favorite option <action name="search" class="com.foo.SearchAction"> <result type="tiles">searchResultPage</result> <result name="welcome" type="tiles">welcomePage</result> <result name="product" type="tiles">productPage</result> etc... </action> I think you are correct that this is a common pattern. When I have implemented a QuickSearch in the global nav, I use option #1 and display any errors or results on a results page. I think what makes your pattern unique is that you want to display the error in the original page. p.s. I am tiles ignorant so I am treating them like they were a JSP page since they seem to both use the dispatch result type. (woot SiteMesh!) Dirk Forchel wrote: > > I could not resolve my problem yet. How can I use the "dispatch" result > type to forward to actions (or maybe tiles definitions) rather than to > JSPs? > In my application are some situations where I have to forward the error > messages or the field validation errors to to a different action. I can > not use JSPs cos we use Tiles. > Let's assume we have four different Pages. A welcome-page displaying some > welcome information and a "search-form", a category-page displaying a list > of products and the same "search-form", a product page displaying detailed > product information and the same "search-form" and a "search-result-page" > displaying a list of products and as well the same "search-form". > This is the struts config how it could look like: > > <action name="welcome"> > <result type="tiles">welcomePage</result> > </action> > > <action name="category" class="com.foo.CategoryAction"> > <result type="tiles">categoryPage</result> > </action> > > <action name="product" class="com.foo.ProductAction"> > <result type="tiles">productPage</result> > </action> > > <action name="search" class="com.foo.SearchAction"> > <result type="redirect-action">searchResult</result> > <result name="input" type="dispatch">sameAction</result> > <result name="error" type="dispatch">sameAction</result> > </action> > > <action name="searchResult" class="com.foo.SearchListAction"> > <result type="tiles">searchResultPage</result> > </action> > > I do not display the tiles definition here. But it is important to me to > have a "forward" to an action defintion rather than a "redirect". Once I > redirect, I'm going to lose request-scoped data. "redirect" to actions > works perfectly but "forward" doesn't. In my struts configuration > sameAction should be dynamically substituted with the action name or the > action call where the form is included, either "/welcome.action", > "/product.action", "/category.action" or even "/searchResult.action". > Has somebody any idea how to accomplish this? I reckon this is a almost > common workflow. > -- View this message in context: http://www.nabble.com/-S2--Result-Type-Dispatch-problem-with-relative-Action-calls-tp21368053p21449950.html Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org