如何在跌代时用struts2标签对初始值进行转换输出

我们经常会遇到这样一种情形:要将从action里取出的list里的对象数据输出到页面上时,有些值是不能原样输出的。比如,状态或性别之类的属性,我们一般都会用0、1之类的常量值进行标识。CRUD是方便,但是如果原样输出,用户能看得明白吗?(列表中,性别一栏张三的输出值为“0”,李四的输出值为“1”,你问客户他们谁是男谁是女?!他不跟你急,算你走运! :D )

这种现象的解决办法就是在页面上进行输出前,先对初始值做一下转换后再输出给用户。采用struts2的iterate标签可以很方便的在页面上进行迭代,如:
    
<table>
<tr>
<td>序列</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
<s:if test="users!=null">
<s:iterator value="users" status="stat">
<tr>
<td><s:property value="#stat.index"/></td>
<td><s:property value="name"/></td>
<td><s:property value="sex"/></td>
<td><s:property value="age"/></td>
</tr>
</s:iterator>
</s:if>
</table>


这里的users是一个list类型,跌代时每一个当前对象就是一个user类型的对象。它有name,sex,age三个属性。通过<s:property value="propertyname"/>的方式即可这些属性值跌代输出。

但是这里的sex属性的数据类型我是用char(1)表示的,也就是说,在数据库里我用0表示性别为男,用1表示性别为女。问题来了,如果采用上以上代码输出就会出现文章开头所说的在性别一栏出现用户看不懂含义的值0或1。

其实struts2是有解决之道的,就是为每个跌代中的当前对象用id加以引用,再结合<s:if/>和<s:else>进行判断就可以实现。这里表扬一个sturts2.<s:else/>可是期盼已久的好东东了。struts1就从来没有满足过。
具体代码如下:

<s:if test="users!=null">
<s:iterator value="users" status="stat" id="u">
<tr>
<td><s:property value="#stat.index"/></td>
<td><s:property value="#u.name"/></td>
<td><s:if test="#u.sex==0">男</s:if><s:else>女</s:else></td>
<td><s:property value="#u.age"/></td>
</tr>
</s:iterator>
</s:if>


上面这段代码有两个重点:
1、迭代时要在<s:iterator/>加上id,便于后面引用。
2、引用当前对象时要在id名前加上"#",如代码中的"#u.name" 即代码当前对象的name属性

另外,我也发现,明明sex属性在javabean里是string类型,在数据在里是char类型。但在这里输出时不能对它的值加''号。如果写成<s:if test="#u.sex=='0'">就不行。只能写成<s:if test="#u.sex==0">。怎么看都象是在对一个integer类型的属性进行取值。这一点我没搞明白。有知道朋友可以留言以告之。先谢谢了!

这是我在javaeye的第一篇文章。自我鼓励一下!! :oops:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值