一、struts2中JSP获取action属性值方法:
例如:action中有属性int age=0;jsp页面可以通过以下2中方式获取该属性值
方法1、<s:property value='fId'/>
方法2、${fId}
方法3、${list.size()}
二、如果action中有属性int age=0;jsp页面中使用if标签判断age是否为0时,可以使用以下方式判断:
<s:if test="#request.fId==0">正确</s:if>
判断对象属性:
<s:if test="#request.persion.age==1">
三、jsp中使用基本标签需要赋值时最好不要用struts2标签,用基本的html标签,否则容易报类型装换错误
四、标签
4.1、<s:select>标签
4.1.1、<s:select>标签替换版本
<select name="user.userId" id="userId">
<option value="">请选则用户</option>
<s:iterator value="userList" id="user_data" status="user_statu">
<s:if test="#user_data.userId==#request.user.userId">
<option value='<s:property value="#user_data.userId"/>' selected><s:property value="#user_data.userName"/></option>
</s:if>
<s:else>
<option value='<s:property value="#user_data.userId"/>'><s:property value="#user_data.userName"/></option>
</s:else>
</s:iterator>
</select>
说明:
userList为action中属性List<User> userList;
User.java中有属性Integer userId;String userName;
4.1.2、赋值
4.1.2.1、方法一
<s:select list="{'a1','a2','a3'}" name="abc" headerKey="" headerValue="--全部--"></s:select>
4.1.2.2、方法二
<s:select list="#{'a1':'a1','a2':'a2','a3':'a3'}" name="abc" headerKey="" headerValue="--全部--"></s:select>
注意:此方法中值不能为数字,数字后台接收不到值
4.1.2.3、设置默认值(用value属性)
<s:select list="#{'a1':'a1','a2':'a2','a3':'a3'}" name="abc" headerKey="" headerValue="--全部--" value="${abc}" ></s:select>
4.1.2.3、通过map赋值
Map myMap = new HashMap();
myMap.put("1","1月");
<s:select list=“myMap" name="abc" listKey="key" listValue="value"></s:select>
4.2、<s:if>判断
4.2.1、是否为null
<s:if test='#request.abc!=null'></s:if>
4.2.2、是否为空值
<s:if test='#request.abc!=""'></s:if>
4.2.3、不为null且不为空置
<s:if test='#request.abc!=null'>
<s:if test='#request.abc!=""'>
</s:if>
</s:if>
4.2.4、list里是否有值
<s:if test="null!=abclist&&abclist.size()>0">
4.2.5、判断list是否为空
<s:if test="null != list && 0 != list.size()">
</s:if>
4.2.6、多条件判断
<s:if test="abc==457||abc==458">
</s:if>
<s:if test="abc==457&&abc==458">
</s:if>
4.3.7、action中2个属性,a1和a2判断a1和a2是否相等
<s:if test="a1==a2">
</s:if>
4.3、<s:iterator>标签
4.3.1、截取并显示list里前3条记录
<s:subset source="weiList" start="1" count="3">
<s:iterator id="wl">
<s:property value="#wl[0]"/>
<s:property value="#wl[1]"/>
</s:iterator>
</s:subset>
<s:subset source="weiList" start="1" count="3">
<s:iterator>
<s:property value="id"/>
<s:property value="name"/>
</s:iterator>
</s:subset>
4.3.2、取List<Object[]>内的对象数组元素
<s:iterator value="obj" id="object">
<tr>
<td><s:property value="#object[0]"/></td>
<td><s:property value="#object[1]"/></td>
<td><s:property value="#object[2]"/></td>
<td>
<s:if test="%{#object[3].length()>2}">
<s:property value="#object[3].substring(0,2)+'...'" />
</s:if>
<s:else>
<s:property value="#object[3]" />
</s:else>
</td>
<td><s:property value="#object[4]"/></td>
<td>
</tr>
</s:iterator>
4.3.3、嵌套循环 list中的list
<s:iterator id="list" value="infoList" status="sta">
<s:iterator id="info" value=“infoList[#sta.index]">
<p>
<a href="/expert/a/${info.infoId }.shtml" title="${info.subject }">
<s:if test="subject.length()>=21">
<s:property value='subject.substring(0,20)'/><b>. . .</b>
</s:if>
<s:else>
${info.subject }
</s:else>
</a>
<span><s:date name="publicTime" format="yyyy-MM-dd" /></span>
</p>
</s:iterator>
</s:iterator>
4.3.3.1、嵌套list比较内外属性值
<s:iterator id="wlist" value="infoLists" id="wid">
<s:iterator id="info" value=“infoList" id="nid">
<s:date name="#wlist.date" format="yyyy-mm-dd"/>
<s:if test="#wid.id==#nid.parentid">
有子节点
</s:if>
</s:iterator>
</s:iterator>
4.3.4、限制循环次数,取前几条记录
<s:subset source="infoList[#sta.index]" start="0" count= "1" >
<!-- start,从第几个开始;count,总共显示几条 -->
<s:iterator id="info">
<p>
<a href="/expert/a/${info.infoId }.shtml" title="${info.subject }">
<s:if test="subject.length()>=21">
<s:property value='subject.substring(0,20)'/><b>. . .</b>
</s:if>
<s:else>
${info.subject }
</s:else>
</a><span><s:date name="publicTime" format="yyyy-MM-dd" /></span>
</p>
</s:iterator>
</s:subset>
4.3.4、集合list 的长度
<s:property value="list.size"/><br/>
<s:property value="list.size()"/><br/>
<s:property value="#request.list.size"/><br/>
<s:property value="#request.list.size()"/><br/>
4.3.5、判断list是否为空
<s:if test="memExpertList == null || memExpertList.size <= 0">
<tr><td align="center" colspan="3" height="23"><font color="red"> 无相关记录!</font></td></tr>
</s:if>
4.3.6、struts2截取字符串,超过长度省略号
<s:if test="subject.length()>=21"><s:property value='subject.substring(0,20)'/><b>. . .</b></s:if>
<s:else>${info.subject }</s:else>
4.3.7、struts2时间格式化
<s:date name="publicTime" format="yyyy-MM-dd HH:mm:ss" />
4.3.7、list里为一个Object[]且只有一个字段的话(即后台Hibernate通过原始sql语句只返回一个字段的list列表时前台取值方法)
<s:iterator value="strArray" id="st">
<s:property value="%{#st}"/>
</s:iterator>
5、<s: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
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:property value="#st.index+1"/>
判断第几个值
<s:if test="#st.index==4">
<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>
6、<s:property>标签
6.1、如果action中list值数量固定,前台读取list中某个对象值<s:property value="list.get(8).getName()">
五、日期格式化显示
<s:date name="startTime" format="yyyy-MM-dd HH:mm:ss"/>
六、<s:checkboxlist name="dd" list="{'a1','a2','a3','a4','a5','a6','a7','a8' }" />
七、截取字符串
// 当长度超过6时截取前6为显示
<s:if test="str.length()>6">
<s:property value="str.substring(0,6)+'...'" />
</s:if>
//否则全部显示
<s:else>
<s:property value="str" />
</s:else>
、、、、、、、、、、、、、、、
<s:if test="%{#str.length()>6}">
<s:property value="str.substring(0,6)+'...'" />
</s:if>
//否则全部显示
<s:else>
<s:property value="str" />
</s:else>
<s:if test='#abc2[3]!=""'>
<s:property value="#abc2[3]" />
</s:if>
七、页面调试
<s:debug></s:debug>
八、action中list赋值给checkbox
<s:checkboxlist name="suiguoNames" list="shuiguoList" value="chushizhi"></s:checkboxlist>
shuiguoList.add("水果");
shuiguoList.add("苹果");
shuiguoList.add("香蕉");
shuiguoList.add("桃子");
shuiguoList.add("荔枝");
例如:action中有属性int age=0;jsp页面可以通过以下2中方式获取该属性值
方法1、<s:property value='fId'/>
方法2、${fId}
方法3、${list.size()}
二、如果action中有属性int age=0;jsp页面中使用if标签判断age是否为0时,可以使用以下方式判断:
<s:if test="#request.fId==0">正确</s:if>
判断对象属性:
<s:if test="#request.persion.age==1">
三、jsp中使用基本标签需要赋值时最好不要用struts2标签,用基本的html标签,否则容易报类型装换错误
四、标签
4.1、<s:select>标签
4.1.1、<s:select>标签替换版本
<select name="user.userId" id="userId">
<option value="">请选则用户</option>
<s:iterator value="userList" id="user_data" status="user_statu">
<s:if test="#user_data.userId==#request.user.userId">
<option value='<s:property value="#user_data.userId"/>' selected><s:property value="#user_data.userName"/></option>
</s:if>
<s:else>
<option value='<s:property value="#user_data.userId"/>'><s:property value="#user_data.userName"/></option>
</s:else>
</s:iterator>
</select>
说明:
userList为action中属性List<User> userList;
User.java中有属性Integer userId;String userName;
4.1.2、赋值
4.1.2.1、方法一
<s:select list="{'a1','a2','a3'}" name="abc" headerKey="" headerValue="--全部--"></s:select>
4.1.2.2、方法二
<s:select list="#{'a1':'a1','a2':'a2','a3':'a3'}" name="abc" headerKey="" headerValue="--全部--"></s:select>
注意:此方法中值不能为数字,数字后台接收不到值
4.1.2.3、设置默认值(用value属性)
<s:select list="#{'a1':'a1','a2':'a2','a3':'a3'}" name="abc" headerKey="" headerValue="--全部--" value="${abc}" ></s:select>
4.1.2.3、通过map赋值
Map myMap = new HashMap();
myMap.put("1","1月");
<s:select list=“myMap" name="abc" listKey="key" listValue="value"></s:select>
4.2、<s:if>判断
4.2.1、是否为null
<s:if test='#request.abc!=null'></s:if>
4.2.2、是否为空值
<s:if test='#request.abc!=""'></s:if>
4.2.3、不为null且不为空置
<s:if test='#request.abc!=null'>
<s:if test='#request.abc!=""'>
</s:if>
</s:if>
4.2.4、list里是否有值
<s:if test="null!=abclist&&abclist.size()>0">
4.2.5、判断list是否为空
<s:if test="null != list && 0 != list.size()">
</s:if>
4.2.6、多条件判断
<s:if test="abc==457||abc==458">
</s:if>
<s:if test="abc==457&&abc==458">
</s:if>
4.3.7、action中2个属性,a1和a2判断a1和a2是否相等
<s:if test="a1==a2">
</s:if>
4.3、<s:iterator>标签
4.3.1、截取并显示list里前3条记录
<s:subset source="weiList" start="1" count="3">
<s:iterator id="wl">
<s:property value="#wl[0]"/>
<s:property value="#wl[1]"/>
</s:iterator>
</s:subset>
<s:subset source="weiList" start="1" count="3">
<s:iterator>
<s:property value="id"/>
<s:property value="name"/>
</s:iterator>
</s:subset>
4.3.2、取List<Object[]>内的对象数组元素
<s:iterator value="obj" id="object">
<tr>
<td><s:property value="#object[0]"/></td>
<td><s:property value="#object[1]"/></td>
<td><s:property value="#object[2]"/></td>
<td>
<s:if test="%{#object[3].length()>2}">
<s:property value="#object[3].substring(0,2)+'...'" />
</s:if>
<s:else>
<s:property value="#object[3]" />
</s:else>
</td>
<td><s:property value="#object[4]"/></td>
<td>
</tr>
</s:iterator>
4.3.3、嵌套循环 list中的list
<s:iterator id="list" value="infoList" status="sta">
<s:iterator id="info" value=“infoList[#sta.index]">
<p>
<a href="/expert/a/${info.infoId }.shtml" title="${info.subject }">
<s:if test="subject.length()>=21">
<s:property value='subject.substring(0,20)'/><b>. . .</b>
</s:if>
<s:else>
${info.subject }
</s:else>
</a>
<span><s:date name="publicTime" format="yyyy-MM-dd" /></span>
</p>
</s:iterator>
</s:iterator>
4.3.3.1、嵌套list比较内外属性值
<s:iterator id="wlist" value="infoLists" id="wid">
<s:iterator id="info" value=“infoList" id="nid">
<s:date name="#wlist.date" format="yyyy-mm-dd"/>
<s:if test="#wid.id==#nid.parentid">
有子节点
</s:if>
</s:iterator>
</s:iterator>
4.3.4、限制循环次数,取前几条记录
<s:subset source="infoList[#sta.index]" start="0" count= "1" >
<!-- start,从第几个开始;count,总共显示几条 -->
<s:iterator id="info">
<p>
<a href="/expert/a/${info.infoId }.shtml" title="${info.subject }">
<s:if test="subject.length()>=21">
<s:property value='subject.substring(0,20)'/><b>. . .</b>
</s:if>
<s:else>
${info.subject }
</s:else>
</a><span><s:date name="publicTime" format="yyyy-MM-dd" /></span>
</p>
</s:iterator>
</s:subset>
4.3.4、集合list 的长度
<s:property value="list.size"/><br/>
<s:property value="list.size()"/><br/>
<s:property value="#request.list.size"/><br/>
<s:property value="#request.list.size()"/><br/>
4.3.5、判断list是否为空
<s:if test="memExpertList == null || memExpertList.size <= 0">
<tr><td align="center" colspan="3" height="23"><font color="red"> 无相关记录!</font></td></tr>
</s:if>
4.3.6、struts2截取字符串,超过长度省略号
<s:if test="subject.length()>=21"><s:property value='subject.substring(0,20)'/><b>. . .</b></s:if>
<s:else>${info.subject }</s:else>
4.3.7、struts2时间格式化
<s:date name="publicTime" format="yyyy-MM-dd HH:mm:ss" />
4.3.7、list里为一个Object[]且只有一个字段的话(即后台Hibernate通过原始sql语句只返回一个字段的list列表时前台取值方法)
<s:iterator value="strArray" id="st">
<s:property value="%{#st}"/>
</s:iterator>
5、<s: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
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:property value="#st.index+1"/>
判断第几个值
<s:if test="#st.index==4">
<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>
6、<s:property>标签
6.1、如果action中list值数量固定,前台读取list中某个对象值<s:property value="list.get(8).getName()">
五、日期格式化显示
<s:date name="startTime" format="yyyy-MM-dd HH:mm:ss"/>
六、<s:checkboxlist name="dd" list="{'a1','a2','a3','a4','a5','a6','a7','a8' }" />
七、截取字符串
// 当长度超过6时截取前6为显示
<s:if test="str.length()>6">
<s:property value="str.substring(0,6)+'...'" />
</s:if>
//否则全部显示
<s:else>
<s:property value="str" />
</s:else>
、、、、、、、、、、、、、、、
<s:if test="%{#str.length()>6}">
<s:property value="str.substring(0,6)+'...'" />
</s:if>
//否则全部显示
<s:else>
<s:property value="str" />
</s:else>
<s:if test='#abc2[3]!=""'>
<s:property value="#abc2[3]" />
</s:if>
七、页面调试
<s:debug></s:debug>
八、action中list赋值给checkbox
<s:checkboxlist name="suiguoNames" list="shuiguoList" value="chushizhi"></s:checkboxlist>
shuiguoList.add("水果");
shuiguoList.add("苹果");
shuiguoList.add("香蕉");
shuiguoList.add("桃子");
shuiguoList.add("荔枝");