if/elseif/else标签: test属性:决定标签内容是否显示的表达式。 iterator标签:iterator标签用于迭代一个集合,这里的集合可以是Collection、Map、Enumeration、Iterator或数组。iterator在迭代过程中,会把迭代的每一个对象暂时压入值栈中,这样在标签的内部就可以直接访问对象的属性和方法,在标签体执行完毕,位于栈顶的对象就会被删除,在第二次迭代的时候再压入新的对象。 id属性:如果指定了该属性,迭代的集合元素将被保存到OgnlContext中,可以使用该属性值来引用集合中的元素。该属性几乎不用; value属性:指定迭代的集合。如果没有指定,则标签会把栈顶的对象放入一个新创建的List中进行迭代; status属性:如果指定该属性,一个以属性值命名的IteratorStatus实例将被放入到OgnlContext中,可以通过该实例获得迭代过程中的状态信息; IteratorStatus类中有如下方法: public int getCount(); 得到当前迭代的元素的总数; public int getIndex(); 得到当前迭代元素的索引; public boolean isEven(); 判断当前元素的顺序是否为偶数; public boolean isOdd(); 判断当前元素的顺序是否为奇数; public boolean isFirst(); 判断当前元素是否为第一个; public boolean isLast(); 判断当前元素是否为最后一个。 这些方法分别对应count、index、even、odd、first和last属性。 append标签:用于将不同的迭代器合并在一起,使一个迭代器迭代完成后转移到下一个迭代器中继续迭代。在append标签内部,使用一个或多个param标签来指定要一起迭代的集合。它的迭代顺序是第一个迭代器迭代完,再迭代后面的迭代器。 id属性:指定该属性后,组合后的迭代器会被保存到OgnlContext中,可以通过id属性来引用。 merge标签:与append标签类似,但迭代的顺序有所不同:merge合并后的迭代器先迭代所有迭代器中的第一个元素,再迭代所有迭代器中的第二个元素,以此类推。 generator标签:generator标签根据separator属性指定的分隔符,将val属性指定的值进行拆分,然后生成一个迭代器,压入值栈的顶部。在generator标签内部,可以使用iterator标签取出栈顶的迭代器对拆分后的各个部分进行迭代。当generator标签结束时,栈顶的迭代器将被删除。 val属性:指定要解析的值; seperator属性:指定用于解析val属性的分隔符; count属性:指定在生成的迭代器中可用的元素数量; converter属性:指定一个转换器,用于将解析后的各个字符串转换为对象。转换器是实现org.apache.struts2.util.IteratorGenerator.Converter接口的类,可以用bean标签来实例化和引用; id属性:如果指定了该属性,生成的迭代器将以该属性值为key保存到pageContext对象中;这一点与其他标签不同。 subset标签:subset标签用于截取一个迭代器的子集; source属性:指定源集合,如果没有指定,则以值栈的栈顶对象作为源集合; start属性:指定从源集合的第几个元素开始截取子集,索引从0开始; count属性:指定截取元素的个数; decider属性:指定一个Decider对象,用于判断一个元素是否应该被包含在子集里。decider是一个实现org.apache.struts2.util.SubsetIteratorFilter.Decider接口的类,可以使用bean标签来实例化和引用; id属性:如果指定了该属性,截取后的子集将以该属性值为key保存在pageContext对象中。 sort标签:sort标签根据comparator属性指定的比较器对集合进行排序,并将排序后的迭代器压入值栈的栈顶。在sort标签内部,可以使用iterator标签取出栈顶的迭代器对排序后的元素进行迭代。当sort标签结束时,栈顶的迭代器将被删除; source属性:指定要排序的集合。如果不指定,则以栈顶的对象作为排序的集合; comparator属性:指定使用的比较器。比较器类是实现java.util.Comparator接口的类,可以用bean标签来实例化和引用; id属性:如果指定该属性,排序后的迭代器将以该属性值为key保存到pageContext对象中。