struts 向后台传值

来源:互联网 发布:parsley.js 中文提示 编辑:程序博客网 时间:2024/05/01 14:21

      用struts1.x 向后台传值,普通的单个值的向后传,通过html标签传值,对应form的属性值,然后在后台获得form,从而得到界面submit的值。

     下面说说用nested标签向后台传对象,以及向后台传送对象的集合list。

      往后台传送对象的时候,form不能为动态的form,必须为实例。也就是说这个时候需要自己写一个form。

      用这个(nested)标签显示对象的值,或者数据封装成对象传值的时候要注意:nested的顶层为form,然后层层扒皮,不多说都懂得。

      下面说说 如何传list对象

       其实用nested传list对象,只需要多做一点特殊处理即可,例如from中有如下的变量

 private List<State> states = new AutoScaleList<State>(new State());

在定义list的时候不能直接用java.util.ArrayList,需要改写list中的get方法,AutoScaleList为继承ArrayList的子类

public class AutoScaleList<E> extends ArrayList<E>{    private static final long serialVersionUID = -8991377776604456691L;        private Object object;        @SuppressWarnings("unchecked")    public E get(int index){        if(this.size() <= index){            for(int i = this.size();i <= index; i++){                try {                    this.add((E)object.getClass().newInstance());                } catch (InstantiationException e) {                    e.printStackTrace();                } catch (IllegalAccessException e) {                    e.printStackTrace();                }            }        }        return super.get(index);    }    public AutoScaleList(Object sample){        this.object = sample;    }}

这样框架就可以把界面列表的值封装成对象list放到form对象中,在后台直接get就能用了。

处对象的方法一个好处就是不比用数组,然后在后台循环了,方便。


不用nested 能不能传对象呢?也可以的,需要用到indexed="true"。这个我没有做过实验的。

<logic:iterate id="userAccess" name="frm_AUSRS02" property="listUserAccess">

          <html:hidden name="userAccess" property="idModule"indexed="true"/>

          <html:radio name="userAccess" property="accessType"indexed="true" value="0"/>

</logic:iterate>

就想上面这样,在循环的里面每个值的显示都必须加上index,这样在生成html的时候,name值是userAccess.idModule这种形式的。和用nested的生成的效果是一样的。

这样实现的时候 注意的是form需要加上一个关于list的方法。

private List<UserAccess> listUserAccess = new ArrayList<UserAccess>();

/** * special getter */public UserAccess getUserAccess(int index) {if(index >= listUserAccess.size()) {for(int i = listUserAccess.size(); i <= index; i++) {listUserAccess.add(new UserAccess());}}return listUserAccess.get(index);}
get     set 方法
public List<UserAccess> getListUserAccess() {return listUserAccess;}public void setListUserAccess(List<UserAccess> listUserAccess) {this.listUserAccess = listUserAccess;}

用数组实现的方法,比较麻烦,也可以实现的。有时间在写


原创粉丝点击