本节中,我们将性别显示为男或女。这里有两种方法供我们选择。
# 方法一:使用标签
/jsp/teacher/index.jsp
```
<s:iterator value="teachers" var="teacher">
<tr>
<td>1</td>
<!-- property输出变量 teacher为内部变量,前面加入# -->
<td><s:property value="#teacher.name" /></td>
<td><s:property value="#teacher.username" /></td>
<!-- 使用if来判断真与假,适用于非真即假的值 -->
<td><s:if test="#teacher.sex">男</s:if> <s:else>女</s:else></td>
<td><s:property value="#teacher.email" /></td>
</tr>
</s:iterator>
```
上面,我们使用if else标签来输出性别。
# 方法二:使用M层
增加获取属性代码
```
package entity;
...
// 声明主体
@Entity
public class Teacher {
...
// 输出性别
public String getSexAttr() {
if (sex) {
return "0男";
} else {
return "1女";
}
}
...
}
```
V层:
```
<td><s:property value="#teacher.sexAttr" /></td>
```
# 测试
TODO:
# 输出序号
顺便,我们一并输出一样序号吧。
我们刚刚学过了`iterator`这个标签的两个属性,分别是数据源`value`和用于循环输出的`teacher`,这次我们再学用于显示状态的`status`.
```
<s:iterator value="teachers" var="teacher" status="status">
<tr>
<td><s:property value="#status" /></td>
<!-- property输出变量 teacher为内部变量,前面加入# -->
<td><s:property value="#teacher.name" /></td>
<td><s:property value="#teacher.username" /></td>
<td><s:property value="#teacher.sexAttr" /></td>
<td><s:property value="#teacher.email" /></td>
</tr>
</s:iterator>
```
我们直接输出`status`,发现它的类型为`IteratorStatus`。我们再以它为关键字到官方上去查一下这个类型。
> 官网:[https://struts.apache.org/docs/](https://struts.apache.org/docs/)
找到它的文档说明页面:[https://struts.apache.org/maven/struts2-core/apidocs/org/apache/struts2/views/jsp/IteratorStatus.html](https://struts.apache.org/maven/struts2-core/apidocs/org/apache/struts2/views/jsp/IteratorStatus.html)
介绍如下:
```
The iterator tag can export an IteratorStatus object so that one can get information about the status of the iteration, such as:
index: current iteration index, starts on 0 and increments in one on every iteration
count: iterations so far, starts on 1. count is always index + 1
first: true if index == 0
even: true if (index + 1) % 2 == 0
last: true if current iteration is the last iteration
odd: true if (index + 1) % 2 == 1
```
在这,我们使用count来输出它的序列:
```
<s:iterator value="teachers" var="teacher" status="status">
<tr>
<td><s:property value="#status.count" /></td>
<!-- property输出变量 teacher为内部变量,前面加入# -->
<td><s:property value="#teacher.name" /></td>
<td><s:property value="#teacher.username" /></td>
<td><s:property value="#teacher.sexAttr" /></td>
<td><s:property value="#teacher.email" /></td>
</tr>
</s:iterator>
```
## 测试
的确,序号就这么来了 :)。
**做为初学者的我们,所遇到的问题,别人早就遇到并解决掉了。**我们要做的,就是去找它的解决方法。如果你没有找到相关的问题和答案,有以下几种能:
1. 你使用的是百度。
2. 你搜索的关键字错了。
3. 你的思想出现偏差,走到了本来就不存在死胡同。
# 作业
试试status的其它的几个属性
# 总结:
使用标签是在前台对性别进行转换,使用M层增加`getSexAttr()`方法,是在后台进行转换。方式不同,但实现的原理相同。
在实际的开发中,非0即1的值,我们将采用Boolean类型,并使用第一方法,即标签法来实现文本的输出。
- README
- 第一章:准备
- 第二章:Hello World!
- 第一节:查看工程文件
- 第二节:JDK、JRE与环境变量
- 第三节:index.jsp
- 第三章:Hello Struts
- 第一节:Web.xml
- 第二节:单入口
- 第三节:Hello Struts
- 第四节:触发C层
- 第四章:建立数据表
- 第一节:建立实体类
- 第二节:测试一
- 第三节:测试二
- 第四节:引入Hibernate
- 第五节:配置Hibernate
- 第六节:建立连接
- 第七节:实体类映射数据表
- 第八节:完善数据表
- 第五章:教师管理
- 第一节:增加数据--add
- 第二节:增加数据--save
- 1 获取传入数据数据
- 2 数据写入测试
- 3 对接C层
- 第三节:数据列表
- 1 获取数据
- 2 重构代码
- 3 C层对接--初始化
- 4 C层添加数据
- 5 V层显示数据
- 6 获取数据库中数据
- 7 显示性别
- 8 分页
- 9 条件查询
- 第四节:修改数据
- 1 edit
- 2 update
- 第五节:删除数据
- 第六节:总结
- 第六章:重构C层
- 第一节:继承ActionSupport类
- 第二节:数据验证
- 第七章:前台分离(前台)
- 第一节:环境搭建
- 第二节:运行环境
- 第三节:共享开发环境
- 第四节:生产环境
- 第八章:前台开发(前台)
- 第一节:本地化
- 第二节:教师列表
- 1 引入M层
- 2 模拟后台返回数据
- 3 C与M对接
- 4 C与V对接
- 第九章:前后台对接(前后台)
- 第一节:后台输出json(后台)
- 第二节:对接前台(全栈)
- 第二节:对接API(前台)
- 第二节:跨域请求(后台)
- 第三节:重构代码(前台)
- 第十章:重构后台M层
- 第一节:数据访问DAO层
- 第二节:项目整体重构
- 第十一章:用户登陆(前后台)
- 第一节:制定规范
- 第二节:定制测试用例
- 第三节:后台输入测试代码(后台)
- 第四节:postman(后台)
- 第五节:新建用户登陆模块(前台)
- 第六节:代码重构(前台)
- 第十二章:班级管理(前后台)
- 第一节:班级列表
- 1 原型开发
- 2 制定规范
- 3 后台对接开发
- 4 前台对接开发
- 第二节:Add
- 1 原型开发
- 2 制定规范
- 3 后台对接开发
- 4 前台对接开发
- 第三节:Save
- 1 制定规范
- 2 后台对接开发
- 3 前台对接开发
- 第四节:Edit
- 1 原型开发
- 2 制定规范
- 3 后台对接开发
- 4 前台对接开发
- 第五节:Update
- 1 制定规范
- 2 后台对接开发
- 3 前台对接开发
- 第六节:Delete
- 1 制定规范
- 2 后台对接开发
- 3 前台对接开发
- 第七节:小结
- 第十三章:班级管理(API)
- 第一节:ER图
- 第二节:create
- 1 实体层
- 2 dao层
- 3 service(server)层
- 4 action层
- 第三节:ManyToOne
- 第四节:Read
- 1 service(server)层
- 2 action层
- 第五节:update
- 1 service(server)层
- 2 action层
- 第六节:update
- 第十四章:重构服务层