I am new to Struts and am using Ted's sample logon app as my basis for
learning. His part works fine. I added a new jsp page that contains two
fields, created a form bean & an action form with validation edits. My
problem is that when I execute my form via
http://localhost:8080/starrd/app/names.do I get validation errors appearing
immediately (before I enter any data in the form). I can't believe thats
normal: I must be doing something wrong.

Thanks in advance for the help.

Dick Starr

Here's the pertinent parts of my struts-config:

  <form-beans>
  <form-bean
    name="nameForm"
    type="com.starrcs.app.SANameForm"/>

  <global-forwards>
    <forward
      name="names"
      path="/app/names.do"/>

  <action-mappings>
    <action
      path="/app/names"
      type="com.starrcs.app.SANameAction"
      name="nameForm"
      scope="request"
      validate="true"
      input="/pages/app/Name.jsp">
      <forward
        name="continue"
        path="/pages/app/Name.jsp"/>
    </action>

Here's my Name.jsp:

<!-- Name.jsp 2002/01/21 RJS -->
<%@ page language="java" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html><head><title><bean:message key="app.name.title"/></title></head>
<html:base/>
<body>
<html:errors/>
<html:form action="/app/names" focus="name">
<table border="0" width="100%">
<tr><th align="right">Name:</th><td align="left">
  <html:text property="name"/></td>
</tr>
<tr><th align="right">Address line one:</th><td align="left">
  <html:text property="addr1"/></td>
<tr>
<td align="right"><html:submit property="submit" value="Submit"/></td>
<td align="left"><html:reset/></td>
</tr>
</table>
</html:form>
</body>
</html>

<%--

Allow user to submit username and password to logon action.

--%>

Here's the pertinent parts of SANameAction.java:

public final class SANameAction extends Action
{
  public ActionForward perform(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response)
        throws IOException, ServletException
  {
    // Obtain fields from web tier
    String name = ((SANameForm) form).getName();
    String addr1 = ((SANameForm) form).getAddr1();

    // Log this event, if appropriate
    if (servlet.getDebug() >= SAConstants.DEBUG)
    {
      StringBuffer message =
        new StringBuffer("SANameAction: name = ");
          message.append(name);
          message.append(", addr1 = ");
          message.append(addr1);
          servlet.log(message.toString());
    }

    // Forward control to the welcome URI
    // specified in the configuration.
    return (mapping.findForward(SAConstants.WELCOME));
  }

} // End SANameAction

Here's the pertinent parts of SANameForm.java:

public final class SANameForm extends ActionForm
{
  // ---- Instance Variables

  private String name = null;
  private String addr1 = null;

  // ---- Properties

  public String getName()
  {
    return (this.name);
  }

  public void setName(String name)
  {
    this.name = name;
  }

  public String getAddr1()
  {
    return (this.addr1);
  }

  public void setAddr1(String addr1)
  {
    this.addr1 = addr1;
  }

// ---- Public Methods
    public void reset(ActionMapping mapping,
        HttpServletRequest request)
    {
      setName(null);
      setAddr1(null);
    }

    public ActionErrors validate(ActionMapping mapping,
                                 HttpServletRequest request)
    {
      ActionErrors errors = new ActionErrors();
      if ((name == null) || (name.length() < 1))
        errors.add("name",
          new ActionError("app.error.name.required"));
      if ((addr1 == null) || (addr1.length() < 1))
        errors.add("addr1",
          new ActionError("app.error.addr1.required"));
      return errors;
    }

} // End SANameForm

When I first execute the form via  http://localhost:8080/starrd/app/names.do
I immediately (before entering any data or executing the submit button) I
get validation errors displayed for name and addr1 and get the following in
my log file:

2002-01-21 20:19:19 action: Processing a GET for /app/names
2002-01-21 20:19:19 action:  Looking for ActionForm bean under attribute
'nameForm'
2002-01-21 20:19:19 action:  Creating new ActionForm instance of class
'com.starrcs.app.SANameForm'
2002-01-21 20:19:19 action:  Storing instance under attribute 'nameForm' in
scope 'request'
2002-01-21 20:19:19 action:  Populating bean properties from this request
2002-01-21 20:19:19 action:  Validating input form properties
2002-01-21 20:19:19 action:   Validation error(s), redirecting to:
/pages/app/Name.jsp

Then if I fill in the two fields with data, I do not get validation errors
(which is correct). Then this is what is in my log:

2002-01-21 20:19:37 action: Processing a POST for /app/names
2002-01-21 20:19:37 action:  Looking for ActionForm bean under attribute
'nameForm'
2002-01-21 20:19:37 action:  Creating new ActionForm instance of class
'com.starrcs.app.SANameForm'
2002-01-21 20:19:37 action:  Storing instance under attribute 'nameForm' in
scope 'request'
2002-01-21 20:19:37 action:  Populating bean properties from this request
2002-01-21 20:19:37 action:  Validating input form properties
2002-01-21 20:19:37 action:   No errors detected, accepting input
2002-01-21 20:19:37 action:  Looking for Action instance for class
com.starrcs.app.SANameAction
2002-01-21 20:19:37 action: SANameAction: name = data1, addr1 = data2
2002-01-21 20:19:37 action: Processing a POST for /app/welcome
2002-01-21 20:19:37 action:  Looking for Action instance for class
com.starrcs.app.SAContinueAction



--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to