我們查看5.1與3.1的規范。在其基礎上增加一個ID字段。
# 新建UpadtaAction.
```
package com.mengyunzhi.javaee.action.klass;
import com.mengyunzhi.javaee.action.Action;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator;
public class UpdateAction extends Action {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private Long teacherId;
public Long getId() {
return id;
}
@RequiredFieldValidator(message = "必須傳入id字段值")
public void setId(Long id) {
this.id = id;
if (this.id == 1000L) {
this.addFieldError("id", "傳入的班級ID不存在或已刪除");
}
}
public String getName() {
return name;
}
@RequiredStringValidator(message = "名稱不能為空")
@StringLengthFieldValidator(minLength = "2", maxLength = "8", trim = true, message = "名稱必須介于2-8之間")
public void setName(String name) {
this.name = name;
}
public void setTeacherId(Long teacherId) {
if(teacherId == 200) {
this.addFieldError("teacherId", "傳入的teacherId無效");
}
this.teacherId = teacherId;
}
public Long getTeacherId() {
return this.teacherId;
}
public String execute() {
return SUCCESS;
}
}
```
測試:

# BUG
其實我們在上面,相當于將 SaveAction的代碼又重新寫了一遍。那么一個問題就來了,為什么我們不直接繼承SaveAction呢?的確,在教程的第一個版本中,我也是這么做的。但是。。。卻發生了莫名的BUG。當我們使用繼承后,在chrome和firefox中發起請求時,卻意外的接收不到Header參數,從而導致發生:服務端不允許跨域的BUG。至于BUG產生的原因,就留給我們以后研究中,現階段,我們只需要記往:所有的觸發器,都只能繼承于Action,如果不這么做,將會發生不允許跨域的錯誤。
>git checkout -f step12.5.2
- 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
- 第十四章:重構服務層