首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

基於 Hibernate 實現動態可配置的數據列表展示

     編輯:Java 相關知識

需求背景

在企業級應用中,常需根據用戶偏好動態調整列表顯示的列。本文展示一種結合 Hibernate、Struts2、Cookie 的實現方案:用戶可在頁面勾選想顯示的字段,系統記住偏好,下次訪問自動套用。

動態列表示例

前端頁面實現

使用 Struts2 標簽庫動態渲染表頭與數據行:

  • <s:iterator value="showItems"> 遍歷用戶選定的顯示列,生成表頭
  • 數據行中根據列索引(#st1.count)渲染不同控件:第一列為 checkbox,第二列為超鏈接,其餘顯示文本
  • 底部提供「顯示項目」配置區,列出所有可選字段及 checkbox,點擊「更新」提交偏好

後端 Action 處理邏輯

public String execute() throws Exception {
    // 分頁參數初始化
    page = (page == null) ? 1 : page;
    pageSize = (pageSize == null) ? 10 : pageSize;
    pager = new Page<Object[]>();
    pager.setPageNo(page);
    pager.setPageSize(pageSize);

    // 1. 從 Cookie 讀取用戶偏好字符串(格式:cusNation|cusCity|...)
    // 2. 若無 Cookie 或參數為空,使用默認字段集合
    // 3. 將字符串解析為 LinkedHashMap 保持順序
    // 4. 調用 Manager 層查詢數據
    // 5. 準備 selectItems(可選字段)、searchItems(搜索字段)供頁面使用
}

核心工具方法

字符串轉 Map:getMapFromStr()

private Map<String, String> getMapFromStr(String str) {
    str = str.trim();
    if (str == null || str.equals("")) return null;
    Map<String, String> map = new LinkedHashMap<>();
    String[] strs = str.split("\\|");
    for (String s : strs) {
        map.put(s, getCusStringMap().get(s));
    }
    return map;
}

字段元數據定義:getCusStringMap()

private Map<String, String> getCusStringMap() {
    Map<String, String> map = new LinkedHashMap<>();
    map.put("id", "序號");
    map.put("cusName", "客戶名稱");
    map.put("cusEmail", "電子郵件");
    // ... 其他字段映射
    return map;
}

Hibernate 動態 HQL 查詢

Manager 層根據用戶選定字段動態拼裝 HQL:

public Page<Object[]> getLinkmans(Page<Object[]> page, String showItemsStr) {
    String hql = "select " + showItemsStr.trim().replaceAll("\\|", ",") + " from Linkman";
    page.setAutoCount(false);
    int totalCount = linkmanDao.sum("select count(*) from Linkman").intValue();
    page.setTotalCount(totalCount);
    page.setResult(linkmanDao.find(hql, page.getFirst(), page.getPageSize()));
    return page;
}

注意:此處直接拼接 HQL 存在注入風險,生產環境建議使用 Criteria API 或參數綁定方式構建安全查詢。

Cookie 持久化策略

  • Cookie 名稱:showItemsStr
  • 有效期:30 天(60 * 60 * 24 * 30 秒)
  • 路徑:/(全站有效)
  • 邏輯:優先使用請求參數刷新 Cookie;無參數時讀取 Cookie;兩者皆無則用默認值

總結

該方案實現了「所見即所得」的列表配置體驗,結合 Cookie 實現無狀態偏好記憶,適合中小型項目快速落地。擴展時可考慮將偏好遷移至數據庫,支持多設備同步。

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