总结之jstl标签:c:foreach嵌套循环的实现——(items值处理)

在jstl标签中foreach标签会被经常使用

  • 通常使用foreach标签是用来遍历后端传来的数据
  • foreach单个遍历比较简单,了解其用法就可以使用了

foreach嵌套遍历有两种思路

  • 先明确要实现的要求,有利于更好的理解foreach嵌套遍历
  • 要求:在一个页面下有多个相册,每个相册有多张图片(1对n)
  • 即我们要先foreach对相册进行遍历,再再相册中foreach对图片进行遍历,其中对图片遍历要根据相册的信息,不同相册有不同图片。

第一种思路

  • 不同相册有不同图片,我们可以在request.setAttribute(“photos”+album.getAlbumId(),photos);加入相册的ld,页面第二个foreach根据不同id遍历不同相册
AlbumService albumService=new AlbumServiceImpl();
        List albumList= albumService.getAlbumsByUserId(user.getUserId());
            for(Album album :albumList){
            PhotoService photoService =new PhotoServiceImpl();
            List photos=photoService.getPhotosByAlbumId(album.getAlbumId());
            int count=photoService.getCountByAlbumId(album.getAlbumId());
            request.setAttribute("photos"+album.getAlbumId(),photos);
              }
        request.setAttribute("albumList",albumList);

实际情况不可行

主要问题:在foreach中items的值没办法拼接(也就是没办法拼接字符串)

  • 我自己进行了很多尝试及搜索(搜索结果里对items拼接问题基本没有)

自己总结原因:

  • 有可能jstl标签可能不支持字符串拼接
  • 有可能jsp虽然支持java语句但没办法java语句在jstl标签属性中使用
  • 有可能foreach中的items只能是完整的字符串,不能拼接。

第二种思路(简单有效)

  • 把嵌套的数据进行封装变成album类List集合photo属性
public class AlbumVO {
    private Integer albumId;
    private String albumName;
    private Integer userId;
    private String introduce;
    private Integer count;
    private List photos;
	//get和set方法省略了
    }

后台

AlbumService albumService=new AlbumServiceImpl();
        List albumList= albumService.getAlbumsByUserId(user.getUserId());
        System.out.println(albumList);
        List albumVOS=new ArrayList<>();
        //这里可以用jdk1.7以后的类拷贝,可以少些代码
        for(Album album :albumList){
            AlbumVO albumVO=new AlbumVO();
            albumVO.setAlbumId(album.getAlbumId());
            albumVO.setAlbumName(album.getAlbumName());
            albumVO.setIntroduce(album.getIntroduce());
            albumVO.setUserId(album.getUserId());
            PhotoService photoService =new PhotoServiceImpl();
            List photos=photoService.getPhotosByAlbumId(album.getAlbumId());
            int count=photoService.getCountByAlbumId(album.getAlbumId());
            albumVO.setPhotos(photos);
            albumVO.setCount(count);
            albumVOS.add(albumVO);
            //request.setAttribute("photos"+album.getAlbumId(),photos);
          
        }
        request.setAttribute("albumList",albumVOS);

jstl的foreach标签items直接写album.photos就行了
即实现了foreach嵌套循环


            
${album.albumName}(${album.introduce})

你可能感兴趣的:(java及javaweb)