要点:
在ActionForm定义值对象company,定义Setter/Getter方法;
在JSP里对input元素的名称稍加变化,加company前缀,company.cp_name。
Struts能把company.cp_name的值自动地Populate到对象company,填充cp_name属性。
效果:
简化ActionForm对属性的定义,实际上系统只需要保留ValueObject和PersistObject两类对象。
本质上是借用值对象ValueObject作为ActionForm的传值对象。
变化:
当页面元素来自不同类值对象时,例如Company,Bulletin等,分别写不同的前缀,company.cp_name,bulletin.bl_title。
对于不属于任何值对象的元素,照基本写法写。
===
示例代码
** 传统写法:
//CompanyForm.java
package com.ticket.company.actionform;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import com.ticket.entity.company.*;
public class CompanyForm
extends ActionForm {
private String cp_name; //名称
private String cp_phone; //电话
private String cp_fax; //传真
public String getCp_name() {
return cp_name;
}
public void setCp_name(String cp_name) {
this.cp_name = cp_name;
}
public String getCp_phone() {
return cp_phone;
}
public void setCp_phone(String cp_phone) {
this.cp_phone = cp_phone;
}
public String getCp_fax() {
return cp_fax;
}
public void setCp_fax(String cp_fax) {
this.cp_fax = cp_fax;
}
//其他代码
}
** 优化写法:
//CompanyForm.java
package com.ticket.company.actionform;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import com.ticket.entity.company.*;
public class CompanyForm
extends ActionForm {
public Company company = new Company();
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
//其他代码
}
//company_add.jsp
要点:
在ActionForm定义值对象company,定义Setter/Getter方法;
在JSP里对input元素的名称稍加变化,加company前缀,company.cp_name。
Struts能把company.cp_name的值自动地Populate到对象company,填充cp_name属性。
效果:
简化ActionForm对属性的定义,实际上系统只需要保留ValueObject和PersistObject两类对象。
本质上是借用值对象ValueObject作为ActionForm的传值对象。
变化:
当页面元素来自不同类值对象时,例如Company,Bulletin等,分别写不同的前缀,company.cp_name,bulletin.bl_title。
对于不属于任何值对象的元素,照基本写法写。
===
示例代码
** 传统写法:
//CompanyForm.java
package com.ticket.company.actionform;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import com.ticket.entity.company.*;
public class CompanyForm
extends ActionForm {
private String cp_name; //名称
private String cp_phone; //电话
private String cp_fax; //传真
public String getCp_name() {
return cp_name;
}
public void setCp_name(String cp_name) {
this.cp_name = cp_name;
}
public String getCp_phone() {
return cp_phone;
}
public void setCp_phone(String cp_phone) {
this.cp_phone = cp_phone;
}
public String getCp_fax() {
return cp_fax;
}
public void setCp_fax(String cp_fax) {
this.cp_fax = cp_fax;
}
//其他代码
}
** 优化写法:
//CompanyForm.java
package com.ticket.company.actionform;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import com.ticket.entity.company.*;
public class CompanyForm
extends ActionForm {
public Company company = new Company();
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
//其他代码
}
//company_add.jsp
<form action="companyAdmin.do?action=addConfirm&forward=listAllLevel1" method="post" name="myForm" >
<tr>
<td height="23" align="right" class="bg2">单位名称: </td>
<td width="85%">
<input name="company.cp_name" type="text" maxlength="25" size="50" height="16">
<font color="#FF0000">*</font>
</td>
</tr>
<tr>
<td height="23" align="right" class="bg2">电 话:</td>
<td width="85%">
<input name="company.cp_phone" type="text" maxlength="20" size="30" height="16">
</td>
</tr>
<tr>
<td height="23" align="right" class="bg2">传 真:</td>
<td width="85%">
<input name="company.cp_fax" type="text" maxlength="20" size="30" height="16">
</td>
</tr>
</form>
本文介绍了一种优化ActionForm属性定义的方法,通过使用对象作为传参对象,简化了属性定义并利用Struts自动填充机制,减少了冗余代码。适用于不同类对象的属性使用不同的前缀,对于不属于任何对象的元素则保持基本写法。
1481

被折叠的 条评论
为什么被折叠?



