This section describes how integrate quickly FormView with Struts with basic configuration of FormView. It is based on an example which must display a form which manage CREATE, UPDATE and READ Project characteristics. It contains :
Fields validation depends on required, maxlength and date .
Create ProjectForm form with the for fields :
public class ProjectForm extends ActionForm { private String projectId; private String projectName; private String projectDate; private String managerId; public String getManagerId() { return managerId; } public void setManagerId(String managerId) { this.managerId = managerId; } public String getProjectDate() { return projectDate; } public void setProjectDate(String projectDate) { this.projectDate = projectDate; } public String getProjectId() { return projectId; } public void setProjectId(String projectId) { this.projectId = projectId; } public String getProjectName() { return projectName; } public void setProjectName(String projectName) { this.projectName = projectName; } }
Create ProjectAction which implements methods load and display of class FormViewDispatchAction :
public ActionForward load(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception { ProjectForm form = (ProjectForm)actionForm; // Load Project if Id project is null (UPDATE) and do nothing otherwise if (form.getProjectId() != null && form.getProjectId().length() > 0) { // Load Project with id get project ID and update form with value of project. } return display(mapping, form, request, response); } public ActionForward display(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception { // Load list of managers and save it into request List managerList = .... request.setAttribute("managerList", managerList); return mapping.findForward("display"); }
Declare form and action into struts-config :
.... <form-bean name="projectForm" type="net.sourceforge.formview.usecases.form.ProjectForm"/> .... <action path="/project" parameter="dispatch" name="projectForm" validate="false" scope="request" type="net.sourceforge.formview.usecases.action.ProjectAction" > <forward name="display" path="/project.jsp" redirect="false"/> </action> ....
Create XML file /WEB-INF/validation.xml :
<form name="/project"> <field property="projectName" depends="required,maxlength"> <arg0 key="projectForm.projectName.error"/> <arg1 name="maxlength" resource="false" key="${var:maxlength}"/> <var> <var-name>maxlength</var-name> <var-value>50</var-value> </var> </field> <field property="projectDate" depends="date"> <arg0 key="projectForm.projectDate.error"/> <var> <var-name>datePattern</var-name> <var-value>${datePattern}</var-value> </var> </field> </form>
Create /WEB-INF/form-view.xml like this :
<?xml version="1.0" encoding="UTF-8"?> <form-view> <!-- Definition about CRU states (CREATE, READ and UPDATE) --> <states> <state name="CREATE" behaviour="READ-WRITE" /> <state name="READ" behaviour="READ-ONLY" /> <state name="UPDATE" behaviour="READ-WRITE" /> </states> </form-view>
Add line into struts-config.xml to configure FormView plugin and Validator Plugin :
<!-- FormView Plugin --> <plug-in className="net.sourceforge.formview.struts.plugin.FormViewPlugIn"> <set-property property="formViewConfig" value="/WEB-INF/form-view.xml"/> <set-property property="validatorConfig" value="/WEB-INF/validation.xml"/> </plug-in> <!-- Validator Plugin --> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in>
By default, FormView manage input type="text" and select HTML. If you want customize your render for another HTML elements or manage another state, you must parameter your file displayer-config my-displayer-config.xml and register it with plugin like this :
<!-- FormView Plugin --> <plug-in className="net.sourceforge.formview.struts.plugin.FormViewPlugIn"> <set-property property="formViewConfig" value="/WEB-INF/form-view.xml"/> <set-property property="validatorConfig" value="/WEB-INF/validation.xml"/> <set-property property="displayerConfig" value="/WEB-INF/my-displayer-config.xml"/> </plug-in>
See sections Initialize FormView and How customize FormView DisplayerConfig for more informations. .
Create projetct.jsp :
<%@ taglib uri="/WEB-INF/form-view.tld" prefix="formview" %> .... <formview:page> <html:form action="/project" > <html:text property="projectName" /> <html:text property="projectDate" /> <html:select property="managerId" > <html:options collection="managerList" property="id" labelProperty="name"/> </html:select> </html:form> </formview:page>
To use form with CREATE behaviour, call url with dispatch loadCreate (/project.do?dispatch=loadCreate). HTML genrated will be :
<form action="/project.do" > <input type="text" name="projectName" /> * <input type="text" property="projectDate" /><img src="calendar.gif" /> <select name="managerId" > <option value="1">Name 1</option> <option value="2" selected="selected" >Name 2</option> </select> </form>
To use form with READ behaviour, call url with dispatch loadRead (/project.do?dispatch=loadRead). HTML genrated will be :
<form action="/project.do" > <input type="text" name="projectName" readonly="readonly" /> <input type="text" property="projectDate" readonly="readonly" /> <input type="hidden" name="managerId" value="2" /> <input type="text" name="mangerIdLabel" value="Name 2" readonly="readonly" /> </form>