strut,jsp动态添加table行,绑定table行数据到formbean

5 篇文章 0 订阅
3 篇文章 0 订阅

struts 绑定form数据到actionForm的机制

一般地,在jsp+servlet的开发模式中,在servelet中是通过request.parameter(key)方法来取得从jsp中传入的值。而struts中将以上的处理给封装到了
actionForm中,其实质也是通过将在formbean中已经定义好的属性,将其与在jsp中控件的name属性去一一匹配,将匹配上的属性作为key通过request.parameter设置到formbean中,从而就实现了formbean与jsp 中控件值的绑定(form需使用html:form 标签,其他标签name名称与属性一致即可映射到formbean中,如果使用普通的html标签可以传值到formbean中,却不能从formbean传值给jsp)

当绑定单个控件的值,那种简单数据类型可以通过以上方式简单绑定即可,如果需要绑定一个List而list中又存放的是对象呢
则可参考以下方式实现:
Class actionForm extends ActionForm 
{
private String attr1;
private List<ClassA> lstA=new new ArrayListExt(
ClassA.class);
//省略get,set方法...
}
Class A
{
 private int aid;
}

//需要扩展ArrayList,目的是为了在页面动态添加行时,数组不会越界。原因是这与struts存储表单数据的结构有关,
//struts通过键值对的方式将值存储在map中,如一般的简单数据,属性名attr1,则会map.put(attr1,value)存取,若是复杂一点的数据存储结构,如lstA,则他的存取方式为
//map.put(lstA[0].aid,value),其中lstA[0]中的0为下标,如有多条数据以此类推。
public class ArrayListExt extends ArrayList {


  private Class itemClass;


  public ArrayListExt(Object obj) {
    this.itemClass = obj.getClass();
  }
  public ArrayListExt(Class clazz){
 this.itemClass=clazz;
  }


  public Object get(int index) {
    try {
      while (index >= size()) {
        add(itemClass.newInstance());
      }
    } catch (Exception e) {
      //e.printStackTrace();
    }
    return super.get(index);
  }

关于jsp的写法,其中indexed="true"一定要加上,该属性表示将使用下标解析,通过name和property标签解析成lstA[index].aid的形式

<logic:iterate id="lstA"  property="lstA" name="forbeanName" indexId="ind">
<tr class="travellerInfo1">
 <td><input  type="text" name="lstA" property="aid" indexed="true"/></td>
</tr>
</logic:iterate>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值