今天第一次使用Struts标签,就是因为一个if和property,折腾了整整一个小时,经过了九九八十一难,终于找到了对的方法。目的:
做出如图的列表,文字前面带个checkbox。
分析:
数据结构:
public class AppExamParm{
private String check_flag="O"; // 是否选中
private String parm_code; // 指标编号
private String parm_name; // 指标名称
private String lev; // 指标等级
private String uplev; // 上级指标
private List<AppExamParm> list; //存放二级指标信息
}
其中:“准入条件审查”、“申请材料是否完整等”为一级指标,其下面的若干项为二级指标。
jsp页面显示过程:
1.遍历appExamParmList显示“准入条件审查”等一级指标。
2.获取appExamParmList.get(i)的list。
3.遍历list,输出一级指标下的二级指标。
4.在显示二级指标的时候,同时判断是否选中(我就是因为对Struts标签的不熟悉被拦在这里了)。
正确显示代码:
<s:iterator id="trCode" value="appexamparmList"><!--第一个遍历-->
<tr>
<td class="TDstyle02" align="center">
</td>
<td align="left" class="TDstyle02">
<b><s:property value="parm_name" /> </b>
</td>
</tr>
<s:iterator id="tdCode" value="list"><!--第二个遍历-->
<tr uplev='<s:property value="uplev"/>'>
<td align="center" class="TDstyle01">
<input type="checkbox" name="appExams"
id="<s:property value='parm_code' />"
<s:if test="check_flag=='true'"><!--判断是否选中-->
checked
</s:if> />
</td>
<td align="left" class="TDstyle01">
--
<s:property value="parm_name" />
</td>
</tr>
</s:iterator>
<tr id='<s:property value="parm_code"/>'>
<td colspan="2"></td>
</tr>
</s:iterator>
犯过的错误:
1.
<s:checkbox name="<s:property value='parm_code' />" value="<s:property value='check_flag' />"></s:checkbox>:
不知道为什么,这样写name是一个字符串“s:property value='parm_code'”,而value=true,但是却不勾选。
2.
<input type="checkbox" name="appExams" id="<s:property value='parm_code' />"
<s:if test="<s:property value='check_flag' />==true">
checked
</s:if>
/>
这样的判断不对。
原因:s:if是可以直接读取集合值的,就是因为这点所以上述的判断不对,所以我改为了
<s:if test="check_flag=='true'">
checked
</s:if> />