Struts DynaActionForm示例

Struts DynaActionForm类是一个有趣的功能,它使您可以动态和声明性地创建表单bean。 它使您可以在Struts配置文件中创建“虚拟”表单Bean,而不是创建真正的Java表单Bean类。 它可以避免您创建许多简单但乏味的Form Bean类。

例如,一个DynaActionForm包含一个“用户名”属性。

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

“ DynaActionForm”和“ ActionForm”之间的区别

  • DynaActionForm不需要创建真正的Java类(只需在Struts配置文件中声明),而ActionForm则需要。
  • 在DynaActionForm中,表单验证是在Action类中实现的,而ActionForm是在其自己的类中实现的。

DynaActionForm示例

Struts <html:text>文本框示例将被重构为使用“ DynaActionForm”而不是常规的“ ActionForm”。

下载Struts DynaActionForm示例– Struts-DynaActionForm-Example.zip

1. struts-config.xml

在Struts配置文件中声明“ DynaActionForm”,然后像平常一样将其链接到Action类。

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类,并通过“ get() ”方法获取“ DynaActionForm”属性。

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");
	    }
	   
	}
 
}

结论

你应该去DynaActionForm吗? 此功能可以为您节省很多时间来创建ActionForm类,但是它具有局限性,有时您必须使用真正的ActionForm来执行某些任务。 在大型项目环境中,始终始终将维护作为第一要务,您必须创建一个遵循的“表单标准”,除非您有充分的支持理由,否则将两者混合使用是不切实际的。 就个人而言,我很少使用DynaActionForm,在Eclipse IDE中,毕竟创建ActionForm并不难。

翻译自: https://mkyong.com/struts/struts-dynaactionform-example/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值