<c:forEach>标签关联集合循环嵌套问题

本文介绍了在JSP页面中使用<c:forEach>标签处理集合循环嵌套显示数据的问题。功能需求是展示一个附件列表,并允许用户点击附件查看其上传的文件列表。原代码逻辑在某些情况下无法正常工作,通过引入<c:set>标签并调整代码,成功解决了循环嵌套的问题。作者怀疑可能是数据结构封装不当导致的困扰。
         最近,在项目中用到<c:forEach>标签在jsp页面做信息展示,关于<c:forEach>各种属性意义这里就不多说了,这里介绍一下我遇到的循环嵌套问题。

       说一下功能需求,需要在页面中展现一个附件列表,然后对于每一个附件都可以再次点击打开该附件上传的文件列表,可以下载,在线查看等。首先我们将页面所需要的附件和文件数据封装起来传到前台页面:

List<FCompanyFilesEntity> filesList=this.fSalesmanOrderService.getCompanyFiles(Integer.valueOf(orderid));
String fileBaseUrl=Global.getResource("file.baseurl");
request.setAttribute("fileslist",filesList);
request.setAttribute("attachmentlist", resultJson.getObj());	

 这里的fileslist存储的是整个附件列表数据,attachmentlist是一个Map<String,List<Map<String,Object>>>数据类型的数据。

前台jsp页面我用<c:forEach>标签展现数据是这样的:

 <c:forEach items="${fileslist}" var="fileitem" step="1" varStatus="status" >	  
		  <div class="panel panel-default">
		    <div class="panel-heading" role="tab" id="heading${fileitem.id}">
		      <h4 class="panel-title">
		        <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion1" href="#collapse${fileitem.id}" aria-expanded="false" aria-controls="collapse${fileitem.id}">
		     ${fileitem.filename}
		        </a>
		      </h4>
		    </div>
		    <div id="collapse${fileitem.id}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading${fileitem.id}">
		      <div class="panel-body">
		       <ul class="tup ace-thumbnails_b" id="${fileitem.filekey}"> 
		       		<c:forEach items="${attachmentlist['${fileitem.filekey}']}" var="financeFile" step="1" varStatus="status">
		       		    <li>
			       		<span class="name" ><a title="${financeFile.title}" class="cboxElement" data-rel="colorbox_a" href="${fileBaseUrl}/${financeFile.realpath}">${financeFile.title}</a></span>
					<a href="commonController.do?viewFile&fileid=${financeFile.id}&subclassname=com.haocheok.finance.salesman.entity.FSalesmanFilesEntity&setFlag=1" title="下载">下载</a>
				        <a  title="${financeFile.title} ${financeFile.gpslocation}" class="cboxElement" data-rel="colorbox_b" href="${fileBaseUrl}/${financeFile.realpath}" >查看</a>
		       		    </li>
				</c:forEach>
		       	</ul>
		       	</div>
		    </div>
	     </div>
</c:forEach>	  
首先外层对附件filelist进行循环展示,内层循坏用filelist的元素的一个filekey属性作为文件列表Map的key值,取出文件list进行循环。

照理来说,这里的逻辑没有任何问题,我试验的好几次都不行。

最后,我查找了一个jsp标签库和一些资料,找到了<c:set>标签,修改是这样的:

 <c:set value="${fileitem.filekey}" var="filekey" />  
 <c:forEach items="${attachmentlist['filekey']}" var="financeFile" step="1" varStatus="status">



用set标签将${fileitem.filekey}重新赋给一个变量值filekey,然后再用这个key去取文件list,就可以了~

(我都怀疑是我数据结构封装的有问题呢。>_<)


2. (单选题) MyBatis 中的 Mapper 接口是做什么用的? A 定义数据库表结构 B 定义 SQL 语句 C 定义事务管理 D 定义业务逻辑 3. (单选题) 在 MyBatis 中,哪个标签用于定义一条查询语句? A <select> B <insert> C <update> D <delete> 4. (单选题) MyBatis 支持的动态 SQL 元素不包括以下哪个? A <if> B <choose> C <when> D <for> 5. (单选题) MyBatis 中,哪个配置元素用于定义数据库连接信息? A <dataSource> B <transactionManager> C <environments> D <mappers> 6. (单选题) MyBatis 中,哪个配置元素用于定义结果映射? A <resultMap> B <parameterMap> C <sqlMap> D <mapper> 7. (单选题) MyBatis 中,哪个配置元素用于定义多个数据库环境? A <environments> B <dataSource> C <mappers> D <transactionManager> 8. (单选题) MyBatis 中,哪个配置元素用于定义 MyBatis 映射文件的位置? A <mappers> B <environments> C <dataSource> D <transactionManager> 9. (单选题) MyBatis 支持的结果集类型不包括以下哪个? A list B map C xml D array 10. (单选题) MyBatis 中,哪个配置元素用于定义 MyBatis 插件? A <plugins> B <environments> C <dataSource> D <mappers> 11. (单选题) MyBatis 支持的日志实现不包括以下哪个? A SLF4J B LOG4J C LOG4J2 D JULL 12. (单选题) MyBatis 中,哪个配置元素用于定义 MyBatis 的日志实现? A <settings> B <environments> C <dataSource> D <logImpl> 13. (单选题) MyBatis 中,哪个配置元素用于定义 MyBatis 属性文件的位置? A <properties> B <propertyFiles> C <configFile> D <settings> 14. (单选题) PageHelper 分页插件是通过什么机制来实现分页的? A 拦截器(Interceptor) B AOP C JDBC D XML 15. (单选题) MyBatisX 是一款基于哪个IDE的快速开发插件? A Eclipse B IntelliJ IDEA C NetBeans D Visual Studio Code 16. (单选题) 在 MyBatis 中,使用分页插件后,以下哪个操作会导致分页不生效? A 在查询之前调用 PageHelper.startPage(pageNum, pageSize); B 在查询之后调用 PageHelper.startPage(pageNum, pageSize); C 使用 PageInfo 对象封装查询结果 D 使用 Page 对象封装查询结果 17. (单选题) MyBatisX 插件的安装步骤中,以下哪个步骤不是必需的? A 在 IDEA 中安装 MybatisX 插件 B 在 pom.xml 文件中引入 MyBatis-Plus 依赖 C 在 application.yml 中配置数据库连接 D 在数据库中创建视图 18. (单选题) 在MyBatis的动态SQL中,<if> 标签的作用是什么? A 仅当指定条件为真时执行内部的SQL语句 B 无条件地执行内部的SQL语句 C 循环执行内部的SQL语句 D 将多个SQL语句合并为一个 19. (单选题) MyBatis中 <foreach> 标签的 collection 属性是用来遍历哪个类型的参数? A 单个值 B 数组 C 集合 D 映射 20. (单选题) 在MyBatis中,<set> 标签用于构建哪个SQL语句的部分? A SELECT B INSERT C UPDATE D DELETE 21. (单选题) 在MyBatis中,如果要实现多对一查询,通常使用哪个标签来定义结果映射? A <collection> B <association> C <result> D <sql> 22. (单选题) 当使用MyBatis进行一对多查询时,以下哪个标签用于定义结果映射中的集合属性? A <association> B <collection> C <result> D <sql> 23. (单选题) 在MyBatis中,如果要通过嵌套查询实现多表关联查询,通常需要在哪个标签中定义子查询? A <association> B <collection> C <resultMap> D <select> 24. (单选题) 在MyBatis中,如果要实现分页关联查询,通常会使用哪个插件来辅助实现? A PageHelper B MyBatisX C MyBatis-Spring D MyBatis-Plus 25. (单选题) MyBatis 允许在 XML 映射文件中使用哪种标签来包含其他 SQL 片段? A <include> B <import> C <file> D <sql>
10-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值