You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

库存CRUD应用:如何处理DuplicateKeyException并保留ModelAttributes?

解决方案

当处理更新错误需要返回编辑表单时,只需在返回视图前手动将acts和device属性添加到Model中即可,不需要使用重定向。修改后的updateDevice方法如下:

@PatchMapping("/{inventoryCard}")
public String updateDevice(@ModelAttribute("device") @Valid Device device,
                           BindingResult bindingResult,
                           @PathVariable("inventoryCard") String inventoryCard,
                           Model model){ // 添加Model参数
    try{
        deviceDAO.update(inventoryCard, device);
    } catch(DuplicateKeyException e){
        bindingResult.rejectValue("inventoryCard", "error.inventoryCard", "This inventory card already used");
    }
    if(bindingResult.hasErrors()){
        // 将用户提交的device放回模型,保留已输入的内容
        model.addAttribute("device", device);
        // 重新查询该设备的操作记录并添加到模型
        model.addAttribute("acts", actDAO.showActsByDevice(inventoryCard));
        return "property/edit_device.html";
    }
    return "redirect:/device/show_all";
}

说明

  • 给updateDevice方法添加Model参数,Spring会自动注入该对象。
  • 当验证失败或捕获到重复键异常时,先把用户提交的device对象放回模型,这样表单能保留用户已输入的内容,同时将该设备的操作记录acts查询后添加到模型中。
  • 直接返回编辑视图,而不是重定向,这样错误信息和模型数据能直接传递到视图,无需处理Flash属性的问题。

内容的提问来源于stack exchange,提问作者sirensonthewayy--

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:12:41