struts 向后台传值

      用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;
	}

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


你可能感兴趣的:(struts 向后台传值)