本節中,我們將性別顯示為男或女。這里有兩種方法供我們選擇。
# 方法一:使用標簽
/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
- 第十四章:重構服務層