Java-Struts notes

    Struts DynaActionForm

In this tutorial you will learn how to create Struts DynaActionForm. We will recreate our address form with Struts DynaActionForm. DynaActionForm is specialized subclass of ActionForm that allows the creation of form beans with dynamic sets of properties, without requiring the developer to create a Java class for each type of form bean. DynaActionForm eliminates the need of FormBean class and now the form bean definition can be written into the struts-config.xml file. So, it makes the FormBean declarative and this helps the programmer to reduce the development time.
In this tutorial we will recreate the add form with the help of DynaActionForm. It also shows you how you can validate use input in the action class.
Adding DynaActionForm Entry in struts-config.xml
First we will add the necessary entry in the struts-config.xml file. Add the following entry in the struts-config.xml file. The form bean is of org.apache.struts.action.DynaActionForm type. The tag is used to define the property for the form bean. We have defined three properties for our dynamic form bean.

Adding action mapping
Add the following action mapping in the struts-config.xml file:



Creating Action Class
Code for action class is as follows:

package roseindia.net;
 
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionMessage;
 
 
public class AddressDynaAction extends Action
{
  public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws Exception{
 
    DynaActionForm addressForm = (DynaActionForm)form;
 
    //Create object of ActionMesssages
        ActionMessages errors = new ActionMessages();
    //Check and collect errors
        if(((String)addressForm.get("name")).equals("")) {
         errors.add("name",new ActionMessage("error.name.required"));
        }
 
        if(((String)addressForm.get("address")).equals("")) {
         errors.add("address",new ActionMessage("error.address.required"));
        }
 
        if(((String)addressForm.get("email")).equals("")) {
         errors.add("email",new ActionMessage("error.emailaddress.required"));
        }
    //Saves the error
    saveErrors(request,errors);
    //Forward the page
    if(errors.isEmpty()){
    return mapping.findForward("success");
    }else{
    return mapping.findForward("invalid");
    }
  }
}

Creating the JSP file
We will use the Dyna Form DynaAddressForm created above in the jsp file. Here is the code of the jsp(DynaAddress.jsp) file.

<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
 
<html:html locale="true">
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">
<html:form action="/DynaAddress" method="post">
<table>
<tr>
<td align="center" colspan="2">
<font size="4">Please Enter the Following Details</font>
</tr>
 
<tr>
<td align="left" colspan="2">
<font color="red"><html:errors/></font>
</tr>
 
<tr>
<td align="right">
Name
</td>
<td align="left">
<html:text property="name" size="30" maxlength="30"/>
</td>
</tr>
<tr>
<td align="right">
Address
</td>
<td align="left">
<html:text property="address" size="30" maxlength="30"/>
</td>
</tr>
 
<tr>
<td align="right">
E-mail address
</td>
<td align="left">
<html:text property="email" size="30" maxlength="30"/>
</td>
</tr>
 
<tr>
<td align="right">
<html:submit>Save</html:submit>
</td>
<td align="left">
<html:cancel>Cancel</html:cancel>
</td>
</tr>
</table>
 
 
</html:form>
</body>
</html:html>

If you have questions, please ask below

Leave a Reply

If you have any questions headover to our forums

You can use these XHTML tags: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <em> <strong>