struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alfredo Manuel Osorio Martinez" <alfredo.oso...@afirme.com>
Subject RE: Struts 2 s:action tag doesn't render action errors if any are present
Date Thu, 28 Oct 2010 18:04:11 GMT
Hello Dave and thank you for your quick response,

1. Let's say I want to keep doing the rendering of the control in that way. How would I solve
the problem with the action error messages?
2. What I liked about having an action for rendering the controls it's that I can reuse them
across different JSP pages.  What other alternatives do you suggest me that can achieve the
same level of modularity? 


Alfredo Osorio

-----Mensaje original-----
De: Dave Newton [mailto:davelnewton@gmail.com] 
Enviado el: Thursday, October 28, 2010 12:51 PM
Para: Struts Users Mailing List
Asunto: Re: Struts 2 s:action tag doesn't render action errors if any are present

Rendering a control (and repopulating its values) is a different thing
than displaying validation error messages.

IMO the way you're doing it isn't a particularly good idea; it would
be better to render the control on the page, *possibly* using s:action
to create the list of possible values (which I also really don't
like), but not to render the control. Note that the text on that page
states only that the control will be populated and rendered, which is
true.

I'm opposed to using the s:action tag as a solution to this problem in
general; I don't think it's a good idea, and introduces more issues
than it solves, particularly since better alternatives exist.

Dave

On Thu, Oct 28, 2010 at 1:35 PM, Alfredo Manuel Osorio Martinez
<alfredo.osorio@afirme.com> wrote:
> For example I have the following:
>
> struts.xml:
>
> <action name="personForm">
>
>    <result>/jsp/personForm.jsp</result>
>
> </action>
>
> <action name="savePerson">
>
>    <result>/jsp/successSave.jsp</result>
>
>    <result name="input">/jsp/personForm.jsp</result>
>
> </action>
>
> <action name="countries">
>
>    <result>/jsp/countries.jsp</result>
>
> </action>
>
> personForm.jsp:
>
> <%@ taglib prefix="s" uri="/struts-tags" %>
>
> <s:form action="savePerson">
>
>        <s:textfield name="firstName" label="First Name" />
>
>        <s:textfield name="lastName" label="Last Name" />
>
>        <s:action name="countries" executeResult="true" />
>
>        <s:submit />
>
> </s:form>
>
> CountriesAction.java:
>
> public class CountriesAction extends ActionSupport {
>
>    public String execute() {
>
>        countries = getCountries();
>
>        return SUCCESS;
>
>    }
>
>
>
>    private Map<String, String> getCountries() {
>
>            ...
>
>    }
>
>
>
>    private Map<String, String> countries;
>
> }
>
> countries.jsp:
>
>    <%@ taglib prefix="s" uri="/struts-tags" %>
>
>    <s:select name="countryId" label="Countries" list="countries"
>
>        headerKey="-1" headerValue="Please select the country ..."/>
>
> SavePerson.action
>
> public class SavePerson extends ActionSupport {
>
>
>
>    public void validate() {
>
>        if (firstName == "") {
>
>            addFieldError(firstName, "First Name is required.");
>
>        }
>
>
>
>        if (lastName == "") {
>
>            addFieldError(lastName, "Last Name is required.");
>
>        }
>
>
>
>        if (countryId == "-1") {
>
>            addFieldError(countryId, "Country is required.");
>
>        }
>
>
>
>    }
>
>
>
>    public String execute() {
>
>        //get the properties and save the person...
>
>        return SUCCESS;
>
>    }
>
>
>
>    private String firstName;
>
>    private String lastName;
>
>    private String countryId;
>
>
>
>    //corresponding setters and getters..
>
> }
>
> When I submit the form and a validation error occurs for example let's
> say we didn't fill in any data so the input fields 'firstName' and
> 'lastName' will have their corresponding message next to them. But
> that's not the case for the country select list, even though there are
> action errors those won't display.
>
> I believe this happens because the parent action which is SavePerson is
> the one who added the errors (addFieldErrors) but when the other action
> Countries (the one that populates the list) is called then those errors
> are not available in that context because if I call hasErrors() within
> that Action it will be "false" so when the input gets rendered and check
> if there are any errors in order to render the message will call
> hasErrors and will return false so no errors messages will be rendered.
>
> This approach of calling another action just to render another input
> controls is one of the ways that Struts 2 FAQS tell to do that:
> http://struts.apache.org/2.2.1/docs/how-do-we-repopulate-controls-when-v
> alidation-fails.html
> <http://struts.apache.org/2.2.1/docs/how-do-we-repopulate-controls-when-
> validation-fails.html>
>
> So how can I make those controls on those actions render the action
> errors from its parent action.
>
> Any thoughts?
>
> Thank you in advance
>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message