Struts 16章 DynaValidatorForm/DynaValidatorActionForm
- 16.1. DynaValidatorForm
- 16.2. DynaValidatorActionForm
- 16.3. プロパティ値のコピー
16.3. プロパティ値のコピー
ActionFormやDynaActionForm、DynaValidatorFormからプロパティ値を他のJavaBeanにコピーしたい場面が考えられます。そういった場面ではStrutsでも使用されている「org.apache.struts.commons.beanutils.BeanUtils」クラスが便利です。
BeanUtilsには
- 特定のプロパティ値を取り出すメソッド(getArrayProperty, getIndexedProperty, getMappedProperty, getNestedProperty, getProperty, getSimpleProperty)
- プロパティ値を設定するメソッド(setProperty)
- Mapとプロパティ値のやり取りをするメソッド(describe, populate)
- プロパティ値をコピーするメソッド(copyProperties, copyProperty)
- オブジェクトを複製するメソッド(cloneBean)
が提供されています。プロパティ値をまとめてコピーする場合には5つ目にある「copyProperties」メソッドを使用します。以下はそれを使用した例です。
package sample; public class Product{ private String name=""; private String maker=""; private int price=0; public void setName(String name){ this.name=name; } public String getName(){ return(name); } ... }
package sample; import javax.servlet.http.*; import org.apache.struts.action.*; import org.apache.struts.validator.DynaValidatorForm; import org.apache.commons.beanutils.BeanUtils; public class ProductInputAction extends Action{ public ActionFormward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ DynaValidatorForm dynaForm=(DynaValidatorForm)form; Product product=new Product(); BeanUtils.copyProperties(product, dynaForm); ... } }
copyPropertiesメソッドは2つ引数をとり1つ目にコピー先のオブジェクト、2つ目にコピー元のオブジェクトを指定します。2つ目に指定されたオブジェクトの全プロパティを調べてその値を取り出し、1つ目に指定されたオブジェクトの「同名」のプロパティにコピーします。例えばサンプルでDynaValidatorFormが「name」というプロパティを持っていた場合、getメソッドでその値を取り出し、その値をProductのnameプロパティにsetNameメソッドで値を設定します。