1. <s:iterator value="cooperList" status="st">
<s:if test="#st.odd||#st.first">
boolean isEven() 当前迭代元素索引是否为偶数;
boolean isOdd() 当前迭代元素索引是否为奇数;
boolean isLast() 是否为最后一条元素;
boolean isFirst() 是否为第一条元素。
有以上元素,那么判断何时加入tr就非常方便。
<s:if test="((#stuts.Index)+1)%3==0"> #stuts.Index迭代到了第几个
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</s:if>
struts2.0 iterator
struts2的s:iterator 可以遍历 数据栈里面的任何数组,集合等等 以下几个简单的demo:
s:iterator 标签有3个属性: value:被迭代的集合 id :指定集合里面的元素的id status 迭代元素的索引 1:jsp页面定义元素写法 数组或list
<s:iterator value="{'1','2','3','4','5'}" id='number'> <s:property value='#number'/>A </s:iterator> 打印结果为: 1A2A3A4A5A <s:iterator value="{'e1','e2','e3'}" id="name" status="st">
<s:property value="#name"/>
</s:iterator>
2:索引的用法
如果指定了status,每次的迭代数据都有IteratorStatus的实例,它有以下几个方法 int getCount()返回当前迭代了几个元素 int getIndex()返回当前元素索引 boolean isEven()当然的索引是否偶数 boolean isFirst()当前是否第一个元素 boolean isLast() boolean isOdd()当前元素索引是否奇数 <s:iterator value="{'a','b','c'}" id='char' status='st'>
<s:if test="#st.Even"> 现在的索引是奇数为:<s:property value='#st.index'/> </s:if> 当前元素值:<s:property value='char'/> </s:iterator> 3:遍历map value可以直接定义为: value="#{"1":"a","2":"b"}"
每个元素以都好隔开。元素之间的key和value 冒号隔开 value也可以是数据栈里面的java.util.Map对象 遍历写法如下: <s:iterator value="map" id="id" status="st">
key : <s:property value='key'/> value:<s:property vlaue='value'/> </s:iterator> 当然key 和value 都可以使java 的 Object 3:遍历数据栈.简单的List类,
List<Attr> class Attr{String attrName;String getAttrName(){return "123";}} <s:iterator value="label" id="id">
<s:property value="#id.attrName" /> </s:iterator> 当然value 还可以写成 value="%{label}" label可以有.操作 label的属性List 可以写成value="%{label.list}" 相当于:getLabel().getList(); 4:遍历2个list;
List<AttrName> attrN {color,size,style} List<AttrValue> attrV {red,20,gay} 这2个list的元素是一一对应的,一个attrN对应一个attrV <s:iterator value="%{attrN }" id="id" status="status">
index is : <s:property value='status.index'/> attrName is : <s:property value='id'/> or <s:property value='%{id}'/> attrName is : <s:property value='%{attrV[#status.index]}'/> </s:iterator> |
2.文件上传
你在客户端定义的file控件的名称为:
myFile
所以你在struts2的服务端需要定义myFile的这个属性,
但是struts2有一种自动的机制,能够将文件名,文件类型自动保存到一个变
量里面。
现在的问题是:
struts2怎么知道你要保存的变量是哪一个?随便选择一个吗?这样是没有意义的。
所以struts2就定义了一个规则。
以客户端定义的file控件的名称myFile为准.
private String myFileContentType;// 文件的内容类型
private String myFileFileName;// 上传文件名
注意:
myFile+ContentType
myFile+FileName
这一下struts2就知道是哪一个了,呵呵。
相对路径
ServletActionContext.getRequest().getRealPath("productimage\\"+myFileName);
3.format实例
<fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH点mm分ss秒" />
4.s:property
value="aaa"
value="#session.aaa"
value="%{aaa}"
5.Struts2.0标签实现的一个分页
<td align="center">
<font color="#ffffff">
第<s:property value="pag.page"/>页/
总共<s:property value="pag.allpage"/>页
<s:iterator value="{-3,-2-1,0,1,2,3}" id="name" status="st">
<s:set name="temp" value="#name+pag.page"></s:set>
<s:if test="#temp>0&&#temp<=pag.allpage">
<a href="product.action?pageNo=<s:property value='#temp'/>">
[<s:property value="#temp"/>]
</a>
</s:if>
</s:iterator>
<s:if test="pag.page!=1">
<a href="product.action?pageNo=<s:property value='pag.page-1'/>">上一页</a>
</s:if>
|
<s:if test="pag.page<pag.allpage">
<a href="product.action?pageNo=<s:property value='pag.page+1'/>">下一页</a>
</s:if>
</font>
</td>
6.Struts2乱码问题
用struts2的情况下,fiter过滤器去修改request的字符编码不能够影响struts2中ServletActionContext获得的request的编码。必须在struts.xml中配置
<constant name="struts.i18n.encoding" value="gbk"></constant>
7.获得inputStream和classes路径
JdomParse.class.getClassLoader().getResource("").getPath() ;
JdomParse.class.getClassLoader().getResourceAsStream(“文件”);