<s:iterator>循环嵌套list,内层list依赖外层属性

本文介绍了一个使用Struts框架实现的嵌套迭代示例,通过外层循环遍历categoryList并显示每个类别名称及属性yl1,接着在每个类别下进行内层循环,展示与该类别匹配的所有boardList1中的threadCount属性。

有两个list是嵌套关系,外层list的每个对象有某个属性,根据该属性值不同,内层list不同

如下例:外层list取自action中的categoryList数据,循环输出了name和yl1属性值。在每一个外层对象下又会循环内层list,要求是内层的supername属性值和外层的name属性值相等。然后输出内层的每一个对象的threadCount属性值。

<s:iterator value="categoryList" var="cate">		
			<tr>
				<td><s:property value="#cate.name"/></td>
				<td><s:property value="#cate.yl1"/></td>
			</tr>   
			<tr></tr>
			<tr>				
				<th width="width:40%">版面</th>				
			</tr>
		<s:iterator value="boardList1" var="board">
			<s:if test="supername == [1].name">	<!-- 内层循环依赖外层循环的属性,[1]表明是外层循环,栈原理 -->
			<tr>						
				<th><s:property value="#board.threadCount"/></th>
				
			</tr>
			</s:if>	
		</s:iterator>	
		</s:iterator>


ParameterList Wifi11axMacBase::HandleFrameProcess(const ParameterList& in) { ParameterList list; list.Merge(in, ParameterList::RequireList().Add<Package*>("package")); Package* pclsPackagesMU = list.Get("package"); std::map<WifiSequenceControl::Key, WifiSequenceControl::Number> mapAckRequires; std::map<WifiSequenceControl::Key, unsigned int> mapDataBuffer; bool bRecvAckFlags = false; bool bRecvDataFlags = false; for(unsigned int ui = 0; ui < pclsPackagesMU->GetPartN(); ui++) //for OFDMA & MU-MIMO { const Package& clsPackages = dynamic_cast<const Package&>(pclsPackagesMU->GetPart(ui)); for(unsigned int uj = 0; uj < clsPackages.GetPartN(); uj++) //for AMPDU { Package* pclsPackage = dynamic_cast<Package*>(clsPackages.GetPart(uj).CopyObject()); ASSERT_WITH_MSG(pclsPackage->FindPart<WifiMacHeader>(), *pclsPackage); WifiMacHeader* pclsMacHeader = pclsPackage->FindAndCopyPart<WifiMacHeader>(); ASSERT(pclsMacHeader != 0); MacAddressBase clsAddr1 = pclsMacHeader->GetAddr1(); MacAddressBase clsAddr2 = pclsMacHeader->GetAddr2(); WifiTransmitParameterSet* pclsRxParamSet = pclsPackage->FindAndCopyAttachment<WifiTransmitParameterSet>(); ASSERT(pclsRxParamSet != 0); this->Invoke(SignalEnum::Mac::RECEIVE, ParameterList().Add("package", pclsPackage) .Add("mac header", pclsMacHeader)); if(clsAddr1 == GetMacAddressBase() || clsAddr1.IsBroadCastAddress()) //checking destination address { if(pclsMacHeader->GetType() == WIFI_MAC_QOSDATA) //DATA frame { bRecvDataFlags = true; m_TxopInfo.enumTypeSend = pclsRxParamSet->GetSendType(); ParameterList list; list = HandleDataProcess(ParameterList().Add("package", pclsPackage) .Add("mac header", pclsMacHeader) .Add("mapAckRequires", mapAckRequires)); mapAckRequires = (const std::map<WifiSequenceControl::Key, WifiSequenceControl::Number>&)list.Get("mapAckRequires"); } else if(pclsMacHeader->IsAck() || pclsMacHeader->IsBAck() || pclsMacHeader->IsMBAck()) //ACK frame { bRecvAckFlags = true; for(std::map<WifiSequenceControl::Key, ItemBuffer>::const_iterator ite = m_mapDataItemBuffer.begin(); ite != m_mapDataItemBuffer.end(); ite++) { ItemBuffer& vecDataItemBuffer = m_mapDataItemBuffer[ite->first]; unsigned int uiTotalNumber = vecDataItemBuffer.size(); if(mapDataBuffer.find(ite->first) == mapDataBuffer.end()) { mapDataBuffer.insert(std::map<WifiSequenceControl::Key, unsigned int>::value_type(ite->first, uiTotalNumber)); } } HandleAckProcess(ParameterList().Add("package", pclsPackage) .Add("mac header", pclsMacHeader)); } else {}//do nothing } delete pclsMacHeader; delete pclsRxParamSet; delete pclsPackage; } } if(bRecvAckFlags) //handle ackcomplate { HandleTxComplete(ParameterList().Add("TxComplete Type", RECV_ACK_FRAME) .Add<std::map<WifiSequenceControl::Key, unsigned int>>("data buffer number", mapDataBuffer)); } if(bRecvDataFlags) { HandleRxComplete(ParameterList().Add("Package Type", WIFI_MAC_QOSDATA) .Add("mapAckRequires", mapAckRequires)); } return ParameterList(); }逐行解释代码
03-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值