您的位置:首页 > 编程语言 > Java开发

Struts DynaActionForm example

2015-08-28 15:34 489 查看
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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: