快速业务通道

Seam - 无缝集成JSF,第2部分: 借助Seam进行对话 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
时,与表单中字段有关的课程对象将收到用户的更新。当调用该操作方法时,必须重新使已更新的对象与持久化上下文建立联系。通过使用 save() 方法将该对象传递回服务层,就可以实现。

但是等等 —— 验证在哪里?您肯定不希望无效数据损坏您的数据库!另一方面,您可能不希望验证标记打乱您的视图模板。您甚至可能同意验证代码不属于视图层的说法。幸运的是,Seam 负责完成 JSF 验证的琐碎工作!

借助 Seam 和 Hibernate 进行验证

如果您将整个表单包装到一个 s:validateAll 组件标记中, Seam 允许您在 JSF 的流程验证(Process Validation)阶段执行对数据模型定义的验证。这种验证方法比以下方法更有吸引力:在视图中到处设置 JSF 验证器标记,或者维护一个配置文件,写满针对第三方验证框架的验证定义。取而代之,可以使用 Hibernate Validator 注释向实体类属性指派验证标准,如清单 13 所示。然后 Hibernate 在持久化对象时,对验证进行两次检查,为您提供双重保护。这个双重保障方法意味着视图中不小心出现的 bug 没有任何机会危害您的数据质量。(请参阅 参考资料 了解关于 Hibernate Validator 的更多内容。)

清单 13. 带有 Hibernate 验证注释的课程实体

@Entity @Table(name = "course") public class Course implements Serializable {   private long id;   private String name;   private CourseType type = CourseType.PUBLIC;   private Address address;   private String uri;   private String phoneNumber;   private String description;   public Course() {}   @Id   @GeneratedValue(strategy = GenerationType.AUTO)   @Column(name = "id")   @NotNull   public long getId() {     return this.id;   }   public void setId(long id) {     this.id = id;   }   @Column(name = "name")   @NotNull   @Length(min = 1, max = 50)   public String getName() {     return this.name;   }   public void setName(String name) {     this.name = name;   }   @Column(name = "type")   @Enumerated(EnumType.STRING)   @NotNull   public CourseType getType() {     return type;   }   public void setType(CourseType type) {     this.type = type;   }   @Embedded   public Address getAddress() {     return address;   }      public void setAddress(Address address) {     this.address = address;   }      @Column(name = "uri")   @Length(max = 255)   @Pattern(regex = "^https?://.+contentquot;, message = "validator.custom.url")   public String getUri() {     return this.uri;   }   public void setUri(String uri) {     this.uri = uri;   }   @Column(name = "phone")   @Length(min = 10, max = 10)   @Pattern(regex = "^\\d*contentquot;, message = "validator.custom.digits")   public String getPhoneNumber() {     return this.phoneNumber;   }   public void setPhoneNumber(String phoneNumber) {     this.phoneNumber = phoneNumber;   }   @Column(name = "description")   public String getDescription() {     return this.description;   }   public void setDescription(String description) {     this.description = description;   }   // equals and

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号