在 SSH 框架網上商城專案的開發歷程中,第 11 戰專注於商品的查詢與刪除功能實現。由於邏輯與第 8 節的商品分類查詢刪除高度相似,開發過程主要集中在參數調整與前端交互優化上。本文將詳細拆解前端 EasyUI 組件配置、後端 Service 與 Action 層代碼實現,以及 Struts2 結果映射配置的完整流程。
查詢功能基於 EasyUI 的 searchbox 組件構建,核心在於捕獲用戶輸入的關鍵字並動態重載 DataGrid 數據。關鍵代碼片段如下:
$('#ss').searchbox({
searcher: function(value, name) {
$('#dg').datagrid('load', { name: value });
},
prompt: '請輸入搜索關鍵字'
});
此處 datagrid('load') 方法會攜帶查詢參數發起異步請求,後端根據參數條件篩選數據並返回 JSON 格式結果,實現無刷新分頁查詢。與全量加載邏輯一致,僅差異於查詢參數的動態傳遞。
刪除操作需先通過 getSelections() 獲取用戶勾選的行數據,若無選中則彈出提示;確認刪除後,將所選記錄的 ID 拼接為逗號分隔字符串,通過 $.post 發送至後端 product_deleteByIds.action。成功回調中調用 uncheckAll() 清除選中狀態,並以 reload() 刷新當前頁數據,避免殘留選中狀態干擾後續更新操作。
Service 接口與實現:
public interface ProductService extends BaseService<Product> {
void deleteByIds(String ids);
}
@Service("productService")
public class ProductServiceImpl extends BaseServiceImpl<Product> implements ProductService {
@Override
public void deleteByIds(String ids) {
String hql = "delete from Product p where p.id in (" + ids + ")";
getSession().createQuery(hql).executeUpdate();
}
}
採用 HQL 批量刪除語句,直接操作數據庫,效率較高。需注意 ID 字符串拼接的安全性,生產環境建議使用參數綁定防止 SQL 注入。
ProductAction 中的 deleteByIds() 方法調用 Service 後,將字符串 "true" 以 ByteArrayInputStream 形式返回前端。Struts2 配置採用 stream 結果類型,指定 inputName 為 inputStream,確保響應數據正確傳遞:
<action name="product_*" class="productAction" method="{1}">
<result name="stream" type="stream">
<param name="inputName">inputStream</param>
</result>
</action>
經測試,查詢與刪除功能均能正常運行。查詢響應迅速,刪除操作具備二次確認機制,數據狀態同步準確。本節完成了商品管理模塊的核心 CRUD 閉環,為後續購物車、訂單等業務奠定基礎。開發中體會到:善用框架約定優於配置特性,配合 EasyUI 組件化開發,可顯著提升後台管理系統構建效率。