在iterate标签内部使用indexed属性

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

在iterate标签内部使用indexed属性

Using the Indexed Attribute in the Scope of the Iterate Tag

常常有这样一种需求,一个form中包含多个提交项,而项的数目是不固定,同时每个项还需要同用户进行交互。例如:一个关于培训反馈的调查表,对于不同的培训,调查的项目是不同的。而我们要做的是不论调查项目如何变化,我们的jsp,formbean和action则不用做任何修改。

1.首先FormBean中

private FeedBackItemBean[] feedBackItems;

public void setPageItems(int index, FeedBackItemBean feedBackItem)

{

pageItems[index]=feedBackItem;

}

public FeedBackItemBean getPageItems(int index)

{

return pageItems[index];

}

/**

* @return Returns the pageItems.

*/

public FeedBackItemBean[] getPageItems()

{

return pageItems;

}

/**

* @param pageItems The pageItems to set.

*/

public void setPageItems(FeedBackItemBean[] pageItems)

{

this.pageItems = pageItems;

}

*请注意一下上面的get/set方法。

其中FeedBackItemBean 是用户定义的Bean,为举例,只列举部分属性:

private String feedBackItemTitle = null;

private String feedBackItemContent = null;

private long feedBackItemValue = 0;

2.在jsp中

代码片断如下:

<logic:notEmpty name="applicationTrainingForm" property="feedBackBean.feedBackItems">

<logic:iterate id="pageItems" name="applicationTrainingForm" property="feedBackBean.feedBackItems" indexId="nIndex">

<logic:equal name="pageItems" property="feedBackItemType" value="<%=String.valueOf(FeedBackConstants.FEEDBACK_CHOOSE)%>">

<TR>

<TD class="TableHeader"><bean:write name="pageItems" property="feedBackItemTitle"/></TD>

<TD width="35%" class="TableHeader">

<html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="10">

10</html:radio>

<html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="9">

9</html:radio>

<html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="8">

8</html:radio>

<html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="7">

7</html:radio>

<html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="6">

6</html:radio></TD>

<TD width="35%" class="TableHeader"><html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="5">

5</html:radio>

<html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="4">

4</html:radio>

<html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="3">

3</html:radio>

<html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="2">

2</html:radio>

<html:radio name="pageItems" indexed="true" property="feedBackItemValue" value="1">

1</html:radio></TD>

</TR>

</logic:equal>

<logic:equal name="pageItems" property="feedBackItemType" value="<%=String.valueOf(FeedBackConstants.FEEDBACK_TEXT)%>">

<TR>

<TD class="TableHeader"><bean:write name="pageItems" property="feedBackItemTitle"/></TD>

<TD colspan="2" class="TableHeader"><html:textarea name="pageItems" indexed="true" property="feedBackItemContent" styleClass="TextBox" cols="100%"/></TD>

</TR>

</logic:equal>

</logic:iterate>

</logic:notEmpty>

注意,经解析以后的html代码如下:

<TR>

<TD class="TableHeader">Structure, focus and logic.</TD>

<TD width="35%" class="TableHeader">

<input type="radio" name="pageItems[0].feedBackItemValue" value="10">10

<input type="radio" name="pageItems[0].feedBackItemValue" value="9">9

<input type="radio" name="pageItems[0].feedBackItemValue" value="8">8

<input type="radio" name="pageItems[0].feedBackItemValue" value="7">7

<input type="radio" name="pageItems[0].feedBackItemValue" value="6">6</TD>

<TD width="35%" class="TableHeader"><input type="radio" name="pageItems[0].feedBackItemValue" value="5">5

<input type="radio" name="pageItems[0].feedBackItemValue" value="4">4

<input type="radio" name="pageItems[0].feedBackItemValue" value="3">3

<input type="radio" name="pageItems[0].feedBackItemValue" value="2">2

<input type="radio" name="pageItems[0].feedBackItemValue" value="1">1</TD>

</TR>

<TR>

<TD class="TableHeader">Depth and breadth</TD>

<TD width="35%" class="TableHeader">

<input type="radio" name="pageItems[1].feedBackItemValue" value="10">10

<input type="radio" name="pageItems[1].feedBackItemValue" value="9">9

<input type="radio" name="pageItems[1].feedBackItemValue" value="8">8

<input type="radio" name="pageItems[1].feedBackItemValue" value="7">7

<input type="radio" name="pageItems[1].feedBackItemValue" value="6">6</TD>

<TD width="35%" class="TableHeader"><input type="radio" name="pageItems[1].feedBackItemValue" value="5">5

<input type="radio" name="pageItems[1].feedBackItemValue" value="4">4

<input type="radio" name="pageItems[1].feedBackItemValue" value="3">3

<input type="radio" name="pageItems[1].feedBackItemValue" value="2">2

<input type="radio" name="pageItems[1].feedBackItemValue" value="1">1</TD>

</TR>

<TR>

<TD class="TableHeader">Impact of activities</TD>

<TD width="35%" class="TableHeader">

<input type="radio" name="pageItems[2].feedBackItemValue" value="10">10

<input type="radio" name="pageItems[2].feedBackItemValue" value="9">9

<input type="radio" name="pageItems[2].feedBackItemValue" value="8">8

<input type="radio" name="pageItems[2].feedBackItemValue" value="7">7

<input type="radio" name="pageItems[2].feedBackItemValue" value="6">6</TD>

<TD width="35%" class="TableHeader"><input type="radio" name="pageItems[2].feedBackItemValue" value="5">5

<input type="radio" name="pageItems[2].feedBackItemValue" value="4">4

<input type="radio" name="pageItems[2].feedBackItemValue" value="3">3

<input type="radio" name="pageItems[2].feedBackItemValue" value="2">2

<input type="radio" name="pageItems[2].feedBackItemValue" value="1">1</TD>

</TR>

大家已经注意到了name的值:

以pageItems[0].feedBackItemValue为例做一下说明,首先struts是以reflect机制工作的,于是他调用的方法应该为getPageItems(0).getFeedBackItemValue(),并以此方法来获取值。读到这里,你应该明白了。

于是,剩下的工作就很简单了,只需要在Action中…

3.Action中

ApplicationTrainingForm applicationTrainingForm = (ApplicationTrainingForm) form;

FeedBackItemBean[] pageItems = applicationTrainingForm.getPageItems();

即可获得用户输入的值。

本文的一切权利归本文作者所有,未经许可不得转载。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有