栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring-绑定到对象,而不是字符串或基元

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring-绑定到对象,而不是字符串或基元

所有这些的关键是PropertyEditor。

您需要为Breakfast类定义一个PropertyEditor,然后在控制器的initBinder方法中使用registerCustomEditor配置ServletDataBinder。

例:

public class BreakfastPropertyEditor extends PropertyEditorSupport{    public void setAsText(String incomming){        Breakfast b = yourDao.findById( Integer.parseInt(incomming));        setValue(b);    }    public String getAsText(){        return ((Breakfast)getValue()).getId();    }}

注意,您将需要进行一些null检查等,但是您知道了。在您的控制器中:

public BreakfastFooBarController extends SimpleFormController {    @Override    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {        binder.registerCustomEditor(Breakfast.class, new BreakfastPropertyEditor(yourDao));    }}

需要注意的事情:

  • PropertyEditor的线程不安全
  • 如果您需要弹簧豆,请手动注入它们或在spring将它们定义为原型范围,并在控制器中使用方法注入
  • 如果入站参数无效/找不到,则抛出IllegalArgumentException,Spring会将其正确转换为绑定错误

希望这可以帮助。

编辑(针对评论):在给定的示例中,这看起来有点奇怪,因为BreakfastSelectCommand看起来不像实体,所以我不确定您的实际情况是什么。假设它是一个实体,例如

Person
具有
breakfast
属性,则该
formBackingObject()
方法将从中加载Person对象
PersonDao
,并将其作为命令返回。然后,绑定阶段将根据所选值更改Breakfast属性,以使到达的命令
onSubmit
都设置了breakfast属性。

根据DAO对象的实现方式,两次调用它们或尝试两次加载同一实体实际上并不意味着您将获得两个SQL语句。这尤其适用于Hibernate,它保证它将为给定的标识符返回会话中的同一对象,因此

Breakfast
即使没有改变选择,绑定操作也可以尝试加载该选择,这不会导致任何不必要的后果。高架。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385885.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号