以前没注意struts里的ActionForm是怎样,每次拿个 DynaValidateForm就上去了
现在开始回归基础,务实的想写写个非应付式的项目,锻炼下自己,把问题都看透一些
1,
关于静态ActionForm和动态DynaActionForm,
网上有很多比较,两者区别很明显的是一个需要自己写出class出来,后者可以在xml配置,struts根据xml生成,相应的ActionForm
动态ActionForm可以省下很多ActionForm类,而且由于是写在XML,不想静态类,稍做修改就需要重启服务器,但是会有一个小问题,以后都是用DynaForm.get(String)这样取类了,没有ActionForm的getter了,这样写代码的时候,因为编译器还没智能到可以帮你检查出String是不是你想要的那个,所以会容易出错一些
2,ActionForm和ValidatorForm的区别[动态的一样区别]
ValidatorForm是ActionForm的一个子类,ValidatorForm重写了validate()方法(当然也增加了方法),可以支持validator框架的xml验证了,会很方便的省下很多java验证代码
3,ValidatorForm和ValidatorActionForm
这两者去区别很微小,
后者是前者子类,
看源代码可以发现后者只是将前者的
public String getValidationKey(ActionMapping mapping,
HttpServletRequest request) {
return mapping.getAttribute();
}
重写成了
public String getValidationKey(ActionMapping mapping,
HttpServletRequest request) {
return mapping.getPath();//仅此行不同
}
表现出来的也就是在使用validate框架的时候就是在
<form name="XXXForm">
前者是看的form
<form name="/XXXPath">
后者看到的是Action的path
4,最后要提一下Map-backed ActionForm
它是在ActionForm需要动态扩充的时候使用的
下文转自本人收藏的一部struts学习笔记中,作者不详,不好意思了
/********************我是长长的分割线**********************************/
有的時候您的表單內容可能是由程式動態產生的,這時候表單上的欄位與參數事先並無法得知,因而無法事先決定好 ActionForm 的屬性,在Struts 1.1中,您可以使用Map-backed ActionForm,這樣的ActionForm使用Map來儲存表單的欄位值,一個例子如下:
UserForm.java
package onlyfun.caterpillar;import java.util.*; import javax.servlet.http.*; import org.apache.struts.action.*;public class UserForm extends ActionForm { protected Map map = new HashMap(); public void setValue(String key, Object value) { map.put(key, value); } public Object getValue(String key) { return map.get(key); } public Map getMap() { return map; } public void reset(ActionMapping mapping, HttpServletRequest req) { map.clear(); } }
在Action類別中,您可以如下面的方式來取值:
LoginAction.java
package onlyfun.caterpillar; import javax.servlet.http.*; import org.apache.struts.action.*; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UserForm userForm = (UserForm) form; String name = (String) userForm.getValue("name"); String password = (String) userForm.getValue("password"); ..... } }
/********************我是长长的分割线**********************************/以上均本人新手探索,欢迎智者指正批评
最后,本人对自己的今天的小学习做个小总结:
1,看源代码很爽,有种偷窥的快感,哈哈,下次多看看
2,终于了解动态构造类是怎么干的了,一直想不通怎么给java类动态加属性,原来可以像Map-backed ActionForm一样,用map实现,小小猜测,欢迎指正
现在开始回归基础,务实的想写写个非应付式的项目,锻炼下自己,把问题都看透一些
1,
关于静态ActionForm和动态DynaActionForm,
网上有很多比较,两者区别很明显的是一个需要自己写出class出来,后者可以在xml配置,struts根据xml生成,相应的ActionForm
动态ActionForm可以省下很多ActionForm类,而且由于是写在XML,不想静态类,稍做修改就需要重启服务器,但是会有一个小问题,以后都是用DynaForm.get(String)这样取类了,没有ActionForm的getter了,这样写代码的时候,因为编译器还没智能到可以帮你检查出String是不是你想要的那个,所以会容易出错一些
2,ActionForm和ValidatorForm的区别[动态的一样区别]
ValidatorForm是ActionForm的一个子类,ValidatorForm重写了validate()方法(当然也增加了方法),可以支持validator框架的xml验证了,会很方便的省下很多java验证代码
3,ValidatorForm和ValidatorActionForm
这两者去区别很微小,
后者是前者子类,
看源代码可以发现后者只是将前者的
public String getValidationKey(ActionMapping mapping,
HttpServletRequest request) {
return mapping.getAttribute();
}
重写成了
public String getValidationKey(ActionMapping mapping,
HttpServletRequest request) {
return mapping.getPath();//仅此行不同
}
表现出来的也就是在使用validate框架的时候就是在
<form name="XXXForm">
前者是看的form
<form name="/XXXPath">
后者看到的是Action的path
4,最后要提一下Map-backed ActionForm
它是在ActionForm需要动态扩充的时候使用的
下文转自本人收藏的一部struts学习笔记中,作者不详,不好意思了
/********************我是长长的分割线**********************************/
有的時候您的表單內容可能是由程式動態產生的,這時候表單上的欄位與參數事先並無法得知,因而無法事先決定好 ActionForm 的屬性,在Struts 1.1中,您可以使用Map-backed ActionForm,這樣的ActionForm使用Map來儲存表單的欄位值,一個例子如下:
UserForm.java
package onlyfun.caterpillar;import java.util.*; import javax.servlet.http.*; import org.apache.struts.action.*;public class UserForm extends ActionForm { protected Map map = new HashMap(); public void setValue(String key, Object value) { map.put(key, value); } public Object getValue(String key) { return map.get(key); } public Map getMap() { return map; } public void reset(ActionMapping mapping, HttpServletRequest req) { map.clear(); } }
在Action類別中,您可以如下面的方式來取值:
LoginAction.java
package onlyfun.caterpillar; import javax.servlet.http.*; import org.apache.struts.action.*; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UserForm userForm = (UserForm) form; String name = (String) userForm.getValue("name"); String password = (String) userForm.getValue("password"); ..... } }
/********************我是长长的分割线**********************************/以上均本人新手探索,欢迎智者指正批评
最后,本人对自己的今天的小学习做个小总结:
1,看源代码很爽,有种偷窥的快感,哈哈,下次多看看
2,终于了解动态构造类是怎么干的了,一直想不通怎么给java类动态加属性,原来可以像Map-backed ActionForm一样,用map实现,小小猜测,欢迎指正