如何使用DynaActionForm?
1.在struts-config.xml中:
<form-bean name="uploadForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="upload" type="org.apache.struts.upload.FormFile"/>
<form-property name="url" type="java.lang.String"/>
<form-property name="desc" type="java.lang.String"/>
</form-bean>
1.在struts-config.xml中:
<form-property name="upload" type="org.apache.struts.upload.FormFile"/>
<form-property name="url" type="java.lang.String"/>
<form-property name="desc" type="java.lang.String"/>
</form-bean>
2.JSP在使用taglib没有变化;
3.在Action中使用DynaActionForm时需要注意:
DynaActionForm edFrm=(DynaActionForm)form;
String name= (String)edFrm.get("name");
4.直接使用DynaActionForm,会使使用者丧失使用validate和reset的机会,此时就需要从DynaActionForm
派生出一个子类,然后覆盖validate、reset方法。在派生类中检索属性,使用:this.get("...")
如何创建一个DynaActionForm对象?
答:这种情况出现在通过一个列表选择,然后加载被选择的对象并在细节窗体中显示。此时,不能直接创建DynaActionForm。否则,在使用DynaActionForm的set方法会抛出空指针异常。正确的方法例子:
DynaActionForm edFrm= (DynaActionForm)request.getAttribute( mapping.getAttribute());
......
edFrm.set( "id", new Integer(ur.getId()));
edFrm.set( "name", ur.getName());
edFrm.set( "pwd1", ur.getPassword());
edFrm.set( "pwd2", ur.getPassword());
......
request.setAttribute( mapping.getAttribute(), edFrm);
究其原因是通过new创建的DynaActionForm中并不包含任何属性,在set时找不到当然就是空指针异常啦。