Struts的Indexed屬性用處

banq發表於2004-03-03
說明:這是Struts的一種高階用法,struts-el中有相關說明,這裡討論在一般struts標籤庫下如何實現。

場景:
有一個JavaBeans:如下:

public class LabelValueBean implements Serializable {
    public LabelValueBean(String label, String value) {
        this.label = label;
        this.value = value;
    }
    private String label;

    public String getLabel() {
        return this.label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    private String value;

    public String getValue() {
        return this.value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String toString() {
        StringBuffer sb = new StringBuffer("LabelValueBean[");
        sb.append(this.label);
        sb.append(", ");
        sb.append(this.value);
        sb.append("]");
        return (sb.toString());
    }


}
<p class="indent">


這是非常普通的JavaBeans, 如果ActionForm是這樣:

public class TestBean extends ActionForm {

  .....
  private List lvbeans =  new ArrayList();

  .....
}
<p class="indent">



lvbeans是LabelValueBean的集合,如此組合,如果需要在Jsp頁面中對LabelValueBean的label和value值進行增刪改,怎麼辦?

使用indexed屬性,TestBean類如下:

public class TestBean extends ActionForm {

  .....
  private List lvbeans =  new ArrayList();

  public TestBean(){ //初始化數值
       lvbeans.add(new LabelValueBean("1", "1"));
       lvbeans.add(new LabelValueBean("2", "2"));
       lvbeans.add(new LabelValueBean("3", "3"));

    }

  public  LabelValueBean getLvbeans(int index) {
      return (LabelValueBean)lvbeans.get(index);
  }

  public  List getLvbeans() {
      return lvbeans;
  }

  .....
}
<p class="indent">


注意上述兩個get方法很重要,Jsp頁面程式碼如下:




<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<jsp:useBean id="test2" scope="page" class="test.TestBean"/>

<h2>Test:
 <logic:iterate name="test2" property="lvbeans" id="foo"  indexId="ctr">
    <html:text name="test2"
               property='<%= "lvbeans[" + ctr + "].label" %>' />
   </logic:iterate>

</h2>


這樣,執行後的輸出結果是:



<h2>Test:
 
    <input type="text" name="lvbeans[0].label" value="1">
   
    <input type="text" name="lvbeans[1].label" value="2">
   
    <input type="text" name="lvbeans[2].label" value="3">
   

</h2>


這樣修改TestBean中的List中的LabelValueBean數值了。


參考:

http://jakarta.apache.org/struts/faqs/indexedprops.html

參考文中有些說不清楚,注意陷井。

相關文章