JSF+Spring+Hibernate的实例讲解(原创翻译)(7) 文件上传目前,JSF的Sun参考实现中不支持文件上传。Struts有很好的文件上传能力,然而,Struts外观集成库是必须使用。 在JCatalog项目中,一个图片与每个产品关联。一个用户创建一个新的产品之后,必须上传与之相关的图片。图片保存在应用服务器的文件系统里面。产品ID是图片名.例子应用程序使用<input type="file">,Servlet 和Jakarta通用的文件上传API,实现一个简单的文件长传功能。这个功能使用两个参数:产品图片路径和图片上传结果页面。它们都通过ApplicatonBean配置。请参考FileUploadServlet类的详细资料。校验JSF具有的标准校验是简单基本的,不能满足真实的需求。开发自己的JSF校验是容易的。我在例子应用程序中使用定制标签来开发SelectedItemsRange校验。它校验通过UISelectMany UI组件选择的项目数量:<h:selectManyListbox value="#{prodUCtBean.selectedCategoryIds}" id="selectedCategoryIds"> <catalog:validateSelectedItemsRange minNum="1"/> <f:selectItems value="#{applicationBean.categorySelectItems}" id="categories"/></h:selectManyListbox>更多的详细资料请参考例子应用程序。错误消息定制 在JSF里面,你可以设置资源包定制转换和校验时的错误消息。资源包被设置在faces-config.XML里面:<message-bundle>catalog.view.bundle.Messages</message-bundle>The error message's key-value pairs are added to the Message.properties file:
#conversion error messagesJavax.faces.component.UIInput.CONVERSION=Input data is not in the correct type.
#validation error messagesJavax.faces.component.UIInput.REQUIRED=Required value is missing.业务逻辑层和Spring Framework业务对象和业务服务在业务逻辑层。一个业务对象不仅包含数据,也有与特定对象关联的逻辑。在例子应用程序中标识了三个业务对象:ProdUCt,Category和User.业务服务与业务对象相结合,提供高级的业务逻辑。一个包含直接使用的服务接口的标准的业务接口层应该被定义。在Spring Framework的帮助下,POJO实现了Jcatalog项目业务逻辑层。有两个业务服务:CatalogService包含与目录管理相关的业务逻辑,UserService包含了用户管理逻辑。Spring是基于控制反转概念(IOC,inversion of control)。在例子应用程序中使用的Spring特征包括:Bean management with application contexts:Spring能有效地组织我们的中间层对象,垂直处理。Spring 能避免一个实体功能的分解,促进好的面向对象设计实现,举例来说,接口设计。