论坛首页 Java企业应用论坛

Strut中一个FormBean邦定多个PoJo

浏览 1613 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-11  

有时候在开发当中会遇到这样的一种需求,页面很大,但页面中的所有表单元素不一定是存放在一张表里,当使用O/RMapping技术时,如果前台不做分类处理的话,拿到后台来拆分属性是件很麻烦的事儿,这个时候,可以这样做,在FormBean不像以前直接定义基本对象,而直接定义与数据库映射后的类对象,前端以一种写法就可以自动的往这个类对象的指定属性里赋值了,写法如下:

java 代码
  1. //1.FormBean的定义:   
  2. public class IndexForm extends ActionForm   
  3. {   
  4.     //一定要注意,定义类对象时一定要给其指定到一个对象上,要不然会报空指针异常   
  5.      private FormA formA = new FormA();   
  6.      private FormB formB = new FormB();   
  7.   
  8.      public FormA getFormA(){return formA;}   
  9.      public void setFormA(FormA formA){this.formA = formA;}   
  10.      public FormB getFormB(){return formB;}   
  11.      public void setFormB(FormB formB){this.formB = formB;}   
  12. }   
  13.   
  14. public class FormA   
  15. {   
  16.      private String name;   
  17.      private String age;   
  18.      public String getAge(){return age;}   
  19.      public void setAge(String age){this.age = age;}   
  20.      public String getName(){return name;}   
  21.      public void setName(String name){this.name = name;}   
  22. }   
  23.   
  24. public class FormB   
  25. {   
  26.      private String apple;   
  27.      private String banana;   
  28.      private String orange;   
  29.      public String getApple(){return apple;}   
  30.      public void setApple(String apple){this.apple = apple;}   
  31.      public String getBanana(){return banana;}   
  32.      public void setBanana(String banana){this.banana = banana;}   
  33.      public String getOrange(){return orange;}   
  34.      public void setOrange(String orange){this.orange = orange;}   
  35. }   
xml 代码
  1. //2.Jsp页的写法   
  2. <html>    
  3. <head>  
  4.    <title>JSP for IndexForm form</title>  
  5. </head>  
  6. <body>  
  7.    <html:form action="/index">  
  8.      //用"类型名.属性名"这样的形式来写,这么写后,该Text框的值就会被自动传入到IndexForm的formA属性(对象)的name属性里了   
  9.     <input type="text" name="formA.name"/>  
  10.     <input type="text" name="formB.orange"/>  
  11.     <html:submit/>  
  12.    </html:form>  
  13. </body>  
  14. </html>  
   发表时间:2007-12-11  
还可以定义一个动态formbean,供action调用
formbean定义代码如下:
public class LazyDynaValidatorForm extends DynaValidatorForm {

	private static final long serialVersionUID = -7836802016729590948L;
	
	private LazyDynaBean value=new LazyDynaBean();

	public boolean contains(String arg0, String arg1) {
		return value.contains(arg0, arg1);
	}

	public boolean equals(Object obj) {
		return value.equals(obj);
	}

	public Object get(String arg0, int arg1) {
		return value.get(arg0, arg1);
	}

	public Object get(String arg0, String arg1) {
		return value.get(arg0, arg1);
	}

	public Object get(String arg0) {
		return value.get(arg0);
	}

	public DynaClass getDynaClass() {
		return value.getDynaClass();
	}

	public Map getMap() {
		return value.getMap();
	}

	public int hashCode() {
		return value.hashCode();
	}

	public void remove(String arg0, String arg1) {
		value.remove(arg0, arg1);
	}

	public void set(String arg0, int arg1, Object arg2) {
		value.set(arg0, arg1, arg2);
	}

	public void set(String arg0, Object arg1) {
		value.set(arg0, arg1);
	}

	public void set(String arg0, String arg1, Object arg2) {
		value.set(arg0, arg1, arg2);
	}

	public int size(String arg0) {
		return value.size(arg0);
	}

	public String toString() {
		return value.toString();
	}

}
在action中调用方法如下:
LazyDynaValidatorForm df = (LazyDynaValidatorForm) form;
String 变量名 = df.getString("变量名");
request.setAttribute("变量名",变量名):


在表单中取值
<input type="text" name="变量名" />
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics