• 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.

  • 相关阅读:
    协方差矩阵
    SLAM中的关键帧是什么?有什么用?如何选择关键帧?
    EKF算法与非线性优化算法的比较
    LC217 存在重复元素
    LC42 接雨水
    LC20 有效的括号
    LC3 无重复最长子串
    LC4 寻找两个有序数组的中位数
    ubuntu16.04下安装g2o
    小米 各版本手机系统包 线刷包 卡刷包
  • 原文地址:https://www.cnblogs.com/ghgyj/p/4766689.html
Copyright © 2020-2023  润新知