zoukankan      html  css  js  c++  java
  • Struts DynaActionForm example

    The Struts DynaActionForm class is an interesting feature to let you create a form bean dynamically and declaratively. It enables you to create a “virtual” form bean in Struts configuration file instead of create a real Java form bean class. It can avoid you to create many simple but tedious form bean classes.

    For example, a DynaActionForm contains a “username” property.

    <form-bean name="dynaUserForm"   
    	type="org.apache.struts.action.DynaActionForm">
        <form-property name="username" type="java.lang.String"/>
    </form-bean>
    

    The different between “DynaActionForm” and “ActionForm

    • DynaActionForm is not required to create a real Java class (just declare in Struts config file), but ActionForm does.
    • In DynaActionForm, form validation is implement in Action class, while ActionForm is implement inside its own class.

    DynaActionForm example

    The Struts <html:text> textbox example will be refactor to use the “DynaActionForm” instead of normal “ActionForm”.

    1. struts-config.xml

    Declare the “DynaActionForm” in Struts configuration file and link it to the Action class like normal.

    struts-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" 
    "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">
     
    <struts-config>
     
    	<form-beans>
    		<!--<form-bean
    			name="userForm"
    			type="com.mkyong.common.form.UserForm"/>
    		-->
    		<form-bean name="dynaUserForm"   
    		      type="org.apache.struts.action.DynaActionForm">
    		      <form-property name="username" type="java.lang.String"/>
    		</form-bean>
    
    	</form-beans>
     
    	<action-mappings>
     
    	        <action
    			path="/LoginPage"
    			type="org.apache.struts.actions.ForwardAction"
    			parameter="/pages/login.jsp"/>
     
    		<action
    			path="/Login"
    			type="com.mkyong.common.action.UserAction"
    			name="dynaUserForm"
    			>	
     
    			<forward name="success" path="/pages/welcome.jsp"/>
    			<forward name="failed" path="/pages/login.jsp"/>
    			
    		</action>
    	</action-mappings>
     
    	<message-resources
    		parameter="com.mkyong.common.properties.Common" />
     
    </struts-config>
    

    2. Action

    Move all the form validation method to Action class, and get the “DynaActionForm” property via the “get()” method.

    UserAction.java

    package com.mkyong.common.action;
     
    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.ActionMessage;
    import org.apache.struts.action.ActionMessages;
    import org.apache.struts.action.DynaActionForm;
     
    public class UserAction extends Action{
     
    	public ActionForward execute(ActionMapping mapping,ActionForm form,
    		HttpServletRequest request,HttpServletResponse response) 
            throws Exception {
     
    		DynaActionForm userForm = (DynaActionForm)form;
    		
    		ActionMessages errors = new ActionMessages();
    
    		//do the form validation in action class
    	    if( userForm.get("username") == null || 
                             ("".equals(userForm.get("username")))) {
    
    	       errors.add("common.name.err",
                        new ActionMessage("error.common.name.required"));
    
    	    }
     
    	    saveErrors(request,errors);
    	    
    	    if(errors.isEmpty()){
    	        return mapping.findForward("success");
    	    }else{
    	        return mapping.findForward("failed");
    	    }
    	   
    	}
     
    }
    

    Conclusion

    Should you go for DynaActionForm? This feature can save you a lot time to create ActionForm class, but, it has limitation and sometime you have to use a real ActionForm to do certain tasks. In large project environment, maintenance always is the 1st priority to consider, you have to create a “Form standard” to follow, it’s not practical to mix use of both, unless you have a very solid reason to support. Personally, i seldom use the DynaActionForm, with Eclipse IDE, the ActionForm is not so hard to create after all.

  • 相关阅读:
    四、分配swap分区
    三、fdisk分区
    二、文件系统常用命令
    一、回顾分区和文件系统
    三、文件系统属性chattr权限&系统命令sudo权限
    2、开发环境搭建
    1、基本概念
    SSH服务
    CentOS 7安装启动vsftpd服务
    01.HTML 5与HTML4的区别
  • 原文地址:https://www.cnblogs.com/ghgyj/p/4766689.html
Copyright © 2011-2022 走看看