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

SSH 框架整合:異步分頁查詢與註冊登錄驗證完整示例

     編輯:程式設計綜合問答

技術棧

  • Struts2 + Spring + Hibernate (SSH)
  • 前端:jQuery AJAX + JSON
  • 分頁:PageHelper / 手寫分頁攔截器

核心代碼結構

1. Action (Struts2) - 異步分頁查詢


public class UserAction extends ActionSupport implements ModelDriven<User> {
  @Autowired private UserService userService;
  private User user = new User();
  private int page = 1, rows = 10; // easyui 分頁參數
  private Map<String, Object> result = new HashMap<>();

  public String list() {
    PageBounds pageBounds = new PageBounds(page, rows);
    List<User> list = userService.findByPage(user, pageBounds);
    PageList<User> pageList = (PageList<User>) list;
    result.put("total", pageList.getPaginator().getTotalCount());
    result.put("rows", list);
    return SUCCESS; // struts2-json-plugin 自動序列化 result
  }
  // getter/setter ...
}

2. Service + DAO (Hibernate)


@Service
public class UserServiceImpl implements UserService {
  @Autowired private UserDAO userDAO;

  public List<User> findByPage(User query, PageBounds pageBounds) {
    return userDAO.findByPage(query, pageBounds);
  }
}

@Repository
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
  public List<User> findByPage(User query, PageBounds pageBounds) {
    StringBuilder hql = new StringBuilder("FROM User u WHERE 1=1");
    List<Object> params = new ArrayList<>();
    if (StringUtils.isNotBlank(query.getUsername())) {
      hql.append(" AND u.username LIKE ?");
      params.add("%" + query.getUsername() + "%");
    }
    Query q = getSession().createQuery(hql.toString());
    for (int i = 0; i < params.size(); i++) q.setParameter(i, params.get(i));
    // PageHelper 自動攔截 LIMIT/OFFSET
    return q.list();
  }
}

3. 註冊登錄驗證 (AJAX)


// Action
public String register() {
  if (userService.exists(user.getUsername())) {
    result.put("success", false);
    result.put("msg", "用戶名已存在");
  } else {
    userService.save(user);
    result.put("success", true);
  }
  return SUCCESS;
}

public String login() {
  User dbUser = userService.findByUsername(user.getUsername());
  if (dbUser != null && passwordEncoder.matches(user.getPassword(), dbUser.getPassword())) {
    ActionContext.getContext().getSession().put("USER", dbUser);
    result.put("success", true);
  } else {
    result.put("success", false);
    result.put("msg", "用戶名或密碼錯誤");
  }
  return SUCCESS;
}

4. 前端頁面片段


// 異步分頁表格 (EasyUI DataGrid)
$('#dg').datagrid({
  url: 'user_list.action',
  pagination: true,
  pageSize: 10,
  columns: [[
    {field:'username',title:'用戶名',width:100},
    {field:'email',title:'郵箱',width:200}
  ]]
});

// 註冊表單提交
$('#regForm').form({
  url: 'user_register.action',
  onSubmit: function() { return $(this).form('validate'); },
  success: function(data) {
    var res = JSON.parse(data);
    $.messager.alert('提示', res.msg);
    if (res.success) $('#regDlg').dialog('close');
  }
});

關鍵整合點

  1. struts.xml 配置 json 結果類型,Action 返回 Map/List 直接序列化。
  2. Spring 管理 Service/DAO 事務,@Transactional 標註業務方法。
  3. Hibernate 使用 PageBounds (PageHelper) 實現物理分頁,避免全表掃描。
  4. 密碼加密存儲:BCryptPasswordEncoder。

資源下載

完整可運行項目(含 SQL、配置、前端頁面):百度文檔下載

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