首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Struts 2 Action 傳遞資料到 JSP 的替代方案:屬性驅動與請求屬性對比

     編輯:程式設計綜合問答

公司限制:禁止 ActionContext.getContext().put()

理由:ActionContext 為 ThreadLocal,單元測試困難、耦合 Struts 內部、不利遷移。

方案一:Action 屬性驅動(推薦)

public class UserAction extends ActionSupport {
    private List<UserVO> userList = new ArrayList<>(); // 必須初始化
    public List<UserVO> getUserList() { return userList; }
    public void setUserList(List<UserVO> userList) { this.userList = userList; }

    public String execute() {
        userList = userService.queryAll(); // 業務查詢
        return SUCCESS;
    }
}

JSP 直接用 OGNL 存取:...。

方案二:在 execute() 中設定請求屬性

public String execute() {
    List<UserVO> list = userService.queryAll();
    ServletActionContext.getRequest().setAttribute("userList", list); // 標準 Servlet API
    return SUCCESS;
}

JSP 用 ${userList} 或 ...。

比較

維度屬性驅動請求屬性
型別安全高(編譯期檢查 getter/setter)低(運行期 Map 查找)
單元測試易(直接 new Action 呼叫 getter)需模擬 Request
Struts 耦合度低(僅繼承 ActionSupport)低(使用標準 Servlet API)
適用場景主要業務資料、表單回填臨時資料、跨 Action 轉發、攔截器共享

建議

主要業務資料(列表、表單物件)用屬性驅動;臨時、跨請求共享資料用請求屬性。兩者均符合公司規範,避免 ActionContext。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved