步骤 2 : 模仿和排错 步骤 3 : 效果 步骤 4 : 创建Category.java 步骤 5 : ProductAction.java 步骤 6 : list.jsp 步骤 7 : 测试 
					老规矩,先下载右上角的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。
					 
					
				
					在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。 
 
					
				模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较正确答案 ( 可运行项目 ) 和自己的代码,来定位问题所在。 采用这种方式,学习有效果,排错有效率,可以较为明显地提升学习速度,跨过学习路上的各个槛。 推荐使用diffmerge软件,进行文件夹比较。把你自己做的项目文件夹,和我的可运行项目文件夹进行比较。 这个软件很牛逼的,可以知道文件夹里哪两个文件不对,并且很明显地标记出来 这里提供了绿色安装和使用教程:diffmerge 下载和使用教程 
					访问测试地址: 
					
				http://127.0.0.1:8080/struts/listProduct 
					Category除了有id和name属性外,还有List属性
 
					
				表示category和product是一对多关系 package com.how2java.bean;
import java.util.List;
public class Category {
	int id;
	String name;
	List<Product> products;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Product> getProducts() {
		return products;
	}
	public void setProducts(List<Product> products) {
		this.products = products;
	}
}
 
								
										
									
								
							
					在list()中准备数据 
					
				两个category,并且每个category对应3个product package com.how2java.action;
 
import java.util.ArrayList;
import java.util.List;
import com.how2java.bean.Category;
import com.how2java.bean.Product;
 
public class ProductAction {
	private Product product;
	
	private List<Category> categories =new ArrayList();
	
    public List<Category> getCategories() {
		return categories;
	}
	public void setCategories(List<Category> categories) {
		this.categories = categories;
	}
	public String show() {
        product = new Product();
        product.setName("iphone7");
        return "show";
    }
 
    public String add() {
        return "show";
    }
    
	public String list() {
		Category category1 =new Category();
		category1.setId(1);
		category1.setName("category1");
		
		Category category2 =new Category();
		category2.setId(2);
		category2.setName("category2");
		
		categories.add(category1);
		categories.add(category2);
		
        List<Product> products1=new ArrayList();
        Product p1 = new Product();
        p1.setId(1);
        p1.setName("product1");
        Product p2 = new Product();
        p2.setId(2);
        p2.setName("product2");
        Product p3 = new Product();
        p3.setId(3);
        p3.setName("product3");
 
        products1.add(p1);
        products1.add(p2);
        products1.add(p3);
        
        List<Product> products2=new ArrayList();
        Product p4 = new Product();
        p4.setId(4);
        p4.setName("product4");
        Product p5 = new Product();
        p5.setId(5);
        p5.setName("product5");
        Product p6 = new Product();
        p6.setId(6);
        p6.setName("product6");
        
        products2.add(p4);
        products2.add(p5);
        products2.add(p6);
        
        category1.setProducts(products1);
        category2.setProducts(products2);
        
        return "list";
 
    }
 
    public Product getProduct() {
        return product;
    }
 
    public void setProduct(Product product) {
        this.product = product;
    }
}
 
								
										
									
								
							
					遍历每一个category,接着把每个category下对应的products也遍历出来
					 
					
				<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@page isELIgnored="false"%>
<table border="1" cellspacing="0">
	<tr>
		<td>id</td>
		<td>name</td>
		<td>products</td>
	</tr>
	
	<s:iterator value="categories" var="c">
		<tr>
			<td>${c.id}</td>
			<td>${c.name}</td>
			<td>
				<s:iterator value="#c.products" var="p">
					${p.name}<br/>
				</s:iterator>			
			</td>
		</tr>
	</s:iterator>
</table>
<s:debug/>
 
								
										
									
								
							
					重启tomcat,访问页面 
					
				http://127.0.0.1:8080/struts/listProduct 
				HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
			 
			 
			
			
			
			
			
		
		
		
		 	问答区域     
		 	
				
		  
	 
	  		
	  
	  	2020-03-30
	  		
	  				
	  					 
	  
					
						三层迭代呢?怎么写? 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  
 
1 个答案 
	 
我是傻逼 跳转到问题位置 答案时间:2020-06-20 <s:iterator value="categories" var="c">
   <s:iterator value="#c.products" var="p">
      <s:iterator value="#p.products" var="pp">
            <s:iterator value="#pp.products" var="ppp">
               </s:iterator>
       </s:iterator> 
   </s:iterator> 
</s:iterator>       
		
							
		
		
		
		
	
	
	
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2020-02-26
	  		
	  				
	  					 
	  
					
						为什么之前那些标签效果都出不来了呢 我改名字了呀 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  
 
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2019-03-08
	  		
	  				
	  					 
	  
					
						在Category下面声明List<Product> products; 是什么意思 ? 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  	    
	    
	  
	  		
	  
	  	2017-10-26
	  		
	  				
	  					 
	  
					
						debug是用来干嘛的? 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  	    
	    
	  
	  		
	  
	  	2017-02-07
	  		
	  				
	  					 
	  
					
						<s:iterator value="#c.products" var="p"> 为什么加个#号 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  	    
	    
	  
			
			提问之前请登陆
			
		 
		提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢	
	 
 | 
	|||||||||||||