Spring和JSF集成:选择项目

使用JSF,要使用组合框,列表框和复选框,您需要了解javax.faces.model.SelectItem类。 SelectItem表示单个可选选项。 它既包含渲染所需的信息,又包含选择该项目时应绑定的值。 在大多数情况下, SelectItems是使用标签构造的:
new SelectItem(Title.MISS, "Miss");

在JSF 2.0之前使用SelectItems通常很繁琐,因为您需要编写代码以使域对象适应SelectItems 。 JSF 2.0进行了很多改进,您现在可以使用EL表达式动态构造SelectItems 。 例如:

<h:selectOneMenu><f:selectItems value="#{customerRepository.all}" var="customer" label="#{customer.name}"/>
</h:selectOneMenu>

这无疑有助于减少样板代码的数量,但是,我仍然认为我们可以做一些事情使SelectItems更加易于使用,尤其是在使用Spring时。 考虑到这一点,我一直在开发<s:selectItems>组件,旨在代替<f:selectItems>

我们可以做的第一件事是通过消除指定var属性的需要来帮助减少样板的键入。 使用<s:selectItems>时 ,如果未指定var属性,则默认为item 。 所以上面的代码可以写成:

<h:selectOneMenu><s:selectItems value="#{customerRepository.all}" label="#{item.name}"/>
</h:selectOneMenu>

在上面的示例中,该绑定到一个存储库接口,该接口返回“ 客户”实体集合 。 与标准<f:selectItems>组件一样,您也可以绑定到ArrayDataModel 。 此外,新组件还支持任何以逗号分隔的String值。

<h:selectOneMenu><s:selectItems value="Java, Spring, JavaServer Faces"/>
</h:selectOneMenu>

<s:selectItems>可以帮助的下一件事是值。 在下拉菜单中需要一个“ Please Select”选项来表示null是很常见的。 在原始JSF中,这通常可能意味着每个组件都需要额外加价:

<h:selectOneMenu><f:selectItem label="--- Please Select ---" noSelectionOption="true" itemValue=""/><s:selectItems value="'{items}"/>
</h:selectOneMenu>

无需为每个元素添加额外的标记,只要将其链接到UISelectOne组件,我们的组件就会自动插入“请选择”选项。 您可以使用includeNoSelectionOption属性来覆盖此行为。 用于“不选择选项”的标签将默认为“-请选择-”,但是您可以通过在您的ApplicationContext中添加一个org.springframework.context.MessageSource来解析和修改代码“ spring.faces” ,从而轻松自定义和国际化此文本。 .noselectionoption”

MessageSource的主题上, <s:selectItems>组件将尽可能尝试使用org.springframework.springfaces.message.ObjectMessageSource创建SelectItem的标签。 我过去在博客中写过有关如何将对象转换为消息的内容,而该组件只是利用了这些想法。

在创建要显示的SelectItem时,新组件对我们有所帮助,但是如何处理表单提交呢? 如何将提交的String选项转换回真实对象 ? 在上面的第一个示例中,我们绑定到JPA 客户实体; 值将显示得很好,但是当您提交表单时,将显示“转换错误”,因为JSF不知道如何从提交的String返回到Customer对象。 通常的答案是开发自己的javax.faces.convert.Converter实现,但这通常是有问题的。 通常,您选择的项目值将是一些复杂的对象,很难完整地表示为String

编写将与UISelectOneUISelectMany组件一起使用的Converter时,可以使用一种有趣的技术。 实际上,您只需要编写代码就可以从Object转换为String ,则可以通过迭代SelectItem并返回单个Object值(转换为String时与您提交的值匹配)来完成从另一个方向的转换。 您可以在 Arjan Tijms的此博客文章中了解有关此想法的更多信息。 将此技术与<s:selectItems>组件一起使用非常简单,只需提供一个itemConverterStringValue属性,该属性将用于创建唯一的getAsString()值:

<h:selectOneMenu><s:selectItems value="#{customerRepository.all}" label="#{item.name}" itemConverterStringValue="#{item.id}"/>
</h:selectOneMenu>

实际上, itemConverterStringValue是可选的。 如果未指定,则将使用对象的toString()方法;对于JPA @Entity ,将自动使用@ID字段。 如果需要,您仍然可以自由编写和附加自己的Converter,在这种情况下, itemConverterStringValue将被忽略。

最后,这是<s:selectItems>可以执行的另一个技巧。 如果选择组件绑定到布尔值枚举,则可以完全省略value属性。 选择项将基于绑定支持的所有可能选项( 布尔值“是” /“否”或完整的枚举值集)构建。 这也适用于类型化的集合。 例如,以下将显示选项“ Java”,“ Spring”和“ JavaServer Faces”(假设您具有适当的ObjectMessageSource ):

public enum Technology {JAVA, SPRING, JAVASERVER_FACES
}
public class Bean implements Serializable {private Set<Technology> technologies = new HashSet<Technology>();// ... getters and setters
}
<h:selectManyCheckbox value="#{bean.technologies}"><s:selectItems/>
</h:selectManyCheckbox>
如果您想查看其中的任何代码,请查看GitHub Project中的org.springframework.springfaces.selectitems包。

参考: 集成Spring和JavaServer Faces:从Phil Webb博客博客中的JCG合作伙伴 Phillip Webb 选择项目 。


翻译自: https://www.javacodegeeks.com/2012/06/spring-jsf-integration-select-items.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apt-get update 问题 及gcc高亮

一 gcc高亮 gcc 高亮有好几种方法。 参考 http://www.cokco.cn/thread-39909-1-1.html 这个教程&#xff1a; &#xff08;1&#xff09; git clone https://github.com/chinaran/color-compile/ &#xff08;2&#xff09; cd color-compile make sudo make install&#xff0…

对于MVC中应用百度富文本编辑器问题的解决办法

&#xff11;.对于应用富文本编辑器&#xff50;&#xff4f;&#xff53;&#xff54;提交表单内容提示有危险的解决办法&#xff1a; [ValidateInput(false)] //文本编辑器的表单提交不用提示危险 [HttpPost] public ActionResult Create(FormCollection collection) 即在视图…

html5页面热力图几十万数据,基于百度地图的数据可视化,包括大量数据的标绘以及热力图的插入...

(function(global, factory) {typeof exports object && typeof module ! undefined ? module.exports factory() :typeof define function && define.amd ? define(factory) :(global.PointLine factory());}(this, (function() {use strict;/*** autho…

管理Jenkins作业配置

在JBoss工具和Developer Studio中&#xff0c;我们在Jenkins中管理许多构建作业。 实际上&#xff0c;对于3.2.x / 4.x和3.3.x / 5.x流&#xff0c;有195个以上的作业。 当我们开始建立明年的第一个里程碑时&#xff0c;我们将再产生40多个工作岗位。 这里是其中的一些&#xf…

Redis命令拾遗三(列表List类型)

本文版权归博客园和作者吴双本人共同所有。转载和爬虫请注明原文地址 Redis五种数据类型之列表类型Redis五种数据类型之列表类型。你可以存储一个有序的字符串列表一类数据。比如你想展示你所存储的所有文章中的前十条&#xff0c;当分页取下一页的时候&#xff0c;你也可以取接…

angular2安装笔记

主要摘自&#xff1a;http://www.runoob.com/angularjs2/angularjs2-typescript-setup.html http://blog.csdn.net/lgpwwa/article/details/51788035 开始尝试的时候npm install一直不能正常生成modules文件内的东东&#xff0c;后来试了多次才知道&#xff0c;大概是因为服务器…

计算机桌面上的声音图标没了怎么办,电脑声音图标不见了怎么办超详细教程

我们在用电脑或者平板看视频、听歌的时候&#xff0c;如果声音不合适&#xff0c;大了或小了就会调节音量&#xff0c;除了可以选择设备自带的外部音量大小调节按键外&#xff0c;还可以用自带的声音图标来调节&#xff0c;而屏幕上的声音图标是最方便的。如果屏幕上的声音图标…

XML解组基准:JAXB,STAx,Woodstox

介绍 上周末&#xff0c;我开始考虑如何以一种资源友好的方式处理大量XML数据。我要解决的主要问题是如何以块的形式处理大型XML文件&#xff0c;同时提供上游/下游系统&#xff0c;需要处理一些数据。 当然&#xff0c;我已经使用JAXB技术已有几年了。 使用JAXB的主要优点是可…

ArcGIS空间分析工具

1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset &#xff08;3D 要素工具集&#xff09; Add Z Information 添加 Z 信息 添加关于具有 Z 值的要素类中的要素的高程属性的信息。 Buffer 3D 3D 缓冲 围绕点或线创建三维缓冲区以生成球形或圆柱形的多面…

SHELL编程中如果路径名遇到括号

linux中&#xff0c;如果文件名中带括号&#xff0c;应先对括号处理&#xff0c;在“(”和“&#xff09;”前加上“\”。Bracket_Handle给出了处理方法&#xff1a;sub Bracket_Handle { my ($tmp_name) _; $tmp_name ~ s/\(/\\\(/g; # ( > \( $tmp_name ~ s/\)/…

计算机科学家和心理学家合作,生物智能与人工智能之间的合作

李飞飞带领的斯坦福“以人为本AI研究院”发表文章&#xff0c;探讨人工智能、神经科学、心理学和认知科学&#xff0c;以及数学、物理和社会科学等学科过去是怎样、以及未来将如何共同合作&#xff0c;追求对理解和创造智能系统的探索。最初的类人智能出现在几百万年前的非洲大…

JavaOne 2012 – 2400小时! 一些建议

您可能已经看到JavaOne 2012 Content Catalog在线。 计划委员会经过数周的艰苦工作&#xff0c;对每个提案进行了分类&#xff0c;审查&#xff0c;评分和讨论&#xff0c;我们终于为您设置了&#xff08;希望如此&#xff09;有趣的组合。 整整105天或2400个小时&#xff0c;我…

C语言

自定义函数 &#xff08;1&#xff09;在函数使用之前定义函数 &#xff08;2&#xff09;先声明这个函数&#xff0c;然后使用&#xff0c;使用的代码后面定义这个函数 include <stdio.h> void syahello(){ println("helloo"); }int main(){ sayhello(); // 调…

【Centos】yum 安装mariaDB

[dream361za ~]$ sudo yum search mariadb #查找需安装的包 mariadb-libs.x86_64 : The shared libraries required for MariaDB/MySQL clients #mariadb客户端 mariadb-server.x86_64 : The MariaDB server and related files #mariadb服务 [dream361za ~]$ sudo yum instal…

对口升学计算机组装与维护,对口升学信息技术(计算机)类2017年专业课考试大纲...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼山西省中等职业学校对口升学考试大纲信息技术类专业本考试大纲是以国家中等职业学校计算机专业教学指导方案为依据&#xff0c;以中等职业教育国家规划教材《物理(电工电子类)》(李广华、郝翠兰主编&#xff0c;电子工业出版社)、《…

网页性能优化(初窥)

面试的时候经常会被问到的有关于前端性能优化这一块的问题&#xff0c;扯扯个人的理解 第一条&#xff1a;减少 HTTP 次数的请求 80%的最终用户响应时间花在前端程序上&#xff0c;而其大部分时间则花在各种页面元素&#xff0c; 如图像、 样式表、 脚本和 Flash 等&#xff0c…

STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

Ⅰ、写在前面 关注我分享文章的朋友应该知道我在前面讲述过&#xff08;软件、硬件&#xff09;I2C主机控制从机EEPROM的例子。在I2C通信主机控制程序是比较常见的一种&#xff0c;可以说在实际项目中&#xff0c;很多应用都会使用到I2C通信。但在实际项目中作为I2C从机的应用相…

JavaFX 2:创建登录表单

在本教程中&#xff0c;我将使用JavaFX 2和CSS设计漂亮的Login Form 。 它是经典的登录表单&#xff0c;带有用户名和密码以及登录按钮。 为了遵循本教程&#xff0c;我强烈建议您查看以下这些教程&#xff1a; Eclipse IDE中的JavaFX 2入门 JavaFX 2&#xff1a;HBox JavaFX…

c html导出成word,html转word-html如何转换成WORD

1、打开HTML文件&#xff0c;点击菜单栏文件→使用MicrosoftOfficeWord编辑&#xff0c;之后系统会自动打开Word并显示HTML文件的内容&#xff0c;这是保存即可。2、如果找不到“使用MicrosoftOfficeWord编辑”的话&#xff0c;点击菜单栏工具→Internet选项→程序→HTML编辑器…

怎么解决tomcat占用8080端口问题

怎么解决tomcat占用8080端口问题 相信很多朋友都遇到过这样的问题吧&#xff0c;tomcat死机了&#xff0c;重启eclipse之后&#xff0c;发现Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.The server may already be running in…