javaserver_集成Spring和JavaServer Faces:改进的模板

javaserver

随着2.0版的发布,Facelet模板成为JSF规范的核心部分。 使用<ui:composition><ui:decorate>标记,可以轻松构建复杂的页面,同时仍保持标记的整洁。 模板在创建HTML表单时特别有用,但是不幸的是,模板的确会导致xhtml文件中的重复,从而破坏了良好软件设计的DRY(不要自己重复)原理 。 作为在JSF和Spring之间提供更深层集成的项目的一部分,我开发了两个新组件,旨在简化模板。 在探究新组件之前,让我们看一下如何使用标准JSF模板构建典型表单。

表单模板的初始起点通常是为每个输入添加一些模板。 通常,您需要额外的<div>或<span>标记以供CSS使用。 这是一个典型的例子:

<!-- /WEB-INF/pages/entername.xhtml -->
<ui:decoreate template="/WEB-INF/layout/form.xhtml"><h:inputText id="firstName" label="First Name" value="#{bean.firstName}"/><ui:param name="label" value="First Name"/><ui:param name="for" value="firstName"/>
</ui:decorate>
<ui:decoreate template="/WEB-INF/layout/form.xhtml"><h:inputText id="lastName" label="Last Name" value="#{bean.lastName}"/><ui:param name="label" value="Last Name"/><ui:param name="for" value="lastName"/>
</ui:decorate>
<!-- Many additional form elements -->
<!-- /WEB-INF/layout/form.xhtml -->
<ui:composition><div class="formElement"><span class="formLabel"><h:outputLabel for="#{for}" label="#{label}"></span><ui:insert/></div>
</ui:composition>

在这里,我们可以看到表单上的每个项目都包含在<div>中,并且表单标签被包裹在其他<span>中 。 标记中已经存在一些重复,“ for”参数反映了组件ID。 我还给每个<h:inputText>元素一个标签属性
为了获得更好的验证错误消息,请在“标签” <ui:param>中重复此操作。 如果我们想用星号标记必填字段,情况会变得越来越糟:

<!-- /WEB-INF/pages/entername.xhtml -->
<ui:decoreate template="/WEB-INF/layout/form.xhtml"><h:inputText id="firstName" label="First Name" value="#{bean.firstName}" required="false"/><ui:param name="label" value="First Name"/><ui:param name="for" value="firstName"/><ui:param name="showAsterisk" value="false"/>
</ui:decorate>
<ui:decoreate template="/WEB-INF/layout/form.xhtml"><h:inputText id="lastName" label="Last Name" value="#{bean.lastName}" required="true"/><ui:param name="label" value="Last Name"/><ui:param name="for" value="lastName"/><ui:param name="showAsterisk" value="true"/>
</ui:decorate>
<!-- Many additional form elements -->
<!-- /WEB-INF/layout/form.xhtml -->
<ui:composition><div class="formElement"><span class="formLabel"><h:outputLabel for="#{for}" label="#{label}#{showAsterisk ? ' *' : ''}"></span><ui:insert/></div>
</ui:composition>

非常令人沮丧的是,我们需要传递<ui:param>项,这些项与<h:inputText>上已经指定的属性重复。 很容易看出,即使是相对较小的表单,我们也将最终在标记中重复很多。 我们需要的是一种获取有关模板中插入的组件的信息的方法,即使我们不知道组件将是哪种类型。 我们需要的是<s:componentInfo>

<s:componentInfo>组件公开一个变量,该变量包含有关所插入组件的信息。 此信息包括标签 ,组件clientID以及是否需要该组件。 通过检查插入的项目,我们可以删除很多重复项:

<!-- /WEB-INF/pages/entername.xhtml -->
<ui:decoreate template="/WEB-INF/layout/form.xhtml"><h:inputText id="firstName" label="First Name" value="#{bean.firstName}" required="false"/>
</ui:decorate>
<ui:decoreate template="/WEB-INF/layout/form.xhtml"><h:inputText id="lastName" label="Last Name" value="#{bean.lastName}" required="true"/>
</ui:decorate>
<!-- Many additional form elements -->
<!-- /WEB-INF/layout/form.xhtml -->
<ui:composition><s:componentInfo var="info"><div class="formElement"><span class="#{info.valid ? 'formLabel' : 'formErrorLabel'}"><h:outputLabel for="#{info.for}" label="#{info.label}#{info.required ? ' *' : ''}"></span><ui:insert/></div></s:componentInfo>
</ui:composition>

我们现在可以做的其他事情就是判断插入的组件是否通过了验证。 请注意,上面的示例将为无效的组件选择“ formErrorLabel ” CSS类。

拥有新的<s:componentInfo>组件的一个有趣的功能是,所有<ui:decorate>标签都变得相同。 我们已经删除了标签内的所有重复,但是标签本身仍然重复了很多次。 在这里,我们还有另外一个技巧,可以通过引入新的<s:decorateAll>标记来提供帮助。 使用<s:decorateAll>允许对每个子组件应用一次模板。 这是更新的表单标记:

<!-- /WEB-INF/pages/entername.xhtml -->
<s:decoreateAll template="/WEB-INF/layout/form.xhtml"><h:inputText id="firstName" label="First Name" value="#{bean.firstName}" required="false"/><h:inputText id="lastName" label="Last Name" value="#{bean.lastName}" required="true"/><!-- Many additional form elements -->
</s:decorateAll>
<!-- /WEB-INF/layout/form.xhtml -->
<ui:composition><s:componentInfo var="info"><div class="formElement"><span class="#{info.valid ? 'formLabel' : 'formErrorLabel'}"><h:outputLabel for="#{info.for}" label="#{info.label}#{info.required ? ' *' : ''}"></span><ui:insert/></div></s:componentInfo>
</ui:composition>

如果您想查看这些组件的源代码,请查看springfaces GitHub项目上的org.springframework.springfaces.template.ui软件包。

参考: 集成Spring和JavaServer Faces:在Phil Webb博客上,我们JCG合作伙伴 Phillip Webb 改进了模板 。


翻译自: https://www.javacodegeeks.com/2012/04/integrating-spring-javaserver-faces.html

javaserver

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

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

相关文章

datagrid 什么时候结束编辑_孕吐到底什么时候结束

很多女性刚怀孕&#xff0c;都会出现妊娠反应&#xff0c;比如孕吐。它是由妊娠后绒毛分泌的绒毛膜促进腺激素引起的&#xff0c;在妊娠初期腺激素分泌量较多。备受孕吐折磨的女性&#xff0c;每次吃饭&#xff0c;一闻到刺激性味道&#xff0c;就会想吐&#xff0c;非常难受&a…

201521123032 《Java程序设计》第7周学习总结

1. 本周学习总结 以你喜欢的方式&#xff08;思维导图或其他&#xff09;归纳总结集合相关内容。 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 在contains方法中调用indexOF方法&#xff0c;首先比较下标o&#xff0c;如果onull那么elementData[]中是否n…

计算机图形图像电影论文,计算机图形图像绘制技术地现状分析及应用发展.doc...

计算机图形图像绘制技术地现状分析及应用发展计算机图形图像绘制技术的现状分析及应用发展-计算机论文计算机图形图像绘制技术的现状分析及应用发展金晓倩 JIN Xiao-qian(四川建筑职业技术学院&#xff0c;德阳618000)(Sichuan College of Architectural Technology&#xff0c…

Java EE 7之前版本替代JPA 2.1的非同步持久性上下文

Java EE 7中的非同步持久性上下文 JPA 2.1引入了非同步持久性上下文的概念&#xff0c;该概念允许对JPA实体管理器的刷新进行细粒度控制&#xff0c;即通过显式调用EntityManager&#xff03;joinTransaction 。 以前&#xff0c;这默认情况下是JTA事务的结束&#xff0c;例如&…

三相同步电机怎么接线图_三相电度表怎么看倍数

电工之家&#xff1a;www.dgzj.com QQ群&#xff1a;2179090关注电工之家官方微信公众号“电工之家”&#xff0c;收获更多经验知识。从题主给的照片来看&#xff0c;这个电度表型号是DTS901-4 1.5(6)A 3X220V/380V精确度为1的1级互感器间接接线的三相四线有功电子电度表。那…

第七周进度表

所花时间 7   代码量&#xff08;行&#xff09; 235 博客量 2 所学知识点 了解了结队开发 转载于:https://www.cnblogs.com/muxiaozhou/p/6993180.html

中国计量大学调剂计算机技术,2020年中国计量大学硕士研究生招生调剂公告

一、调剂分数线&#xff1a;详见《中国计量大学2020年硕士研究生招生复试分数线》。二、调剂程序&#xff1a;1.第一阶段&#xff1a;登陆我校“研究生招生信息系统”网址https://yjsb.cjlu.edu.cn/yjszs_xsb/登记调剂信息。此信息用于复试&#xff0c;请务必认真准确填写。2.第…

linux msgrcv阻塞接收_linux下高并发服务器实现

在做网络服务的时候tcp并发服务端程序的编写必不可少。tcp并发通常有几种固定的设计模式套路&#xff0c;他们各有优点&#xff0c;也各有应用之处。下面就简单的讨论下这几种模式的差异&#xff1a;单进程&#xff0c;单线程在accept之后&#xff0c;就开始在这一个连接连接上…

Maven配置tomcat和jetty插件来运行项目

针对eclipse中的Run on Server有些情况下并不是那么好操作&#xff0c;比如配置maven下的springmvc插件&#xff0c;如果使用此方法运行会很容易出现组件缺少导致错误出现一大堆的问题。 那么针对这种情况&#xff0c;maven下的容器插件tomcat和jetty做了很好的支持。比如在mav…

使用Apache Storm和Kite SDK Morphlines的可配置ETL处理

从我担任软件工程师的第一天起&#xff0c;我总是听到很多方面的相同要求&#xff1a; “ 我们希望所有内容都可配置&#xff0c;我们希望在运行时更改所有内容&#xff0c;我们希望有一个可视化工具来应用所有这些逻辑&#xff0c;以便非开发人员使用和配置我们的应用程序。 …

宁夏警官学院计算机专业,宁夏警官职业学院毕业设计模板.docx

宁夏警官职业学院本科生毕业论文题目&#xff1a;基于人工智能的宁夏警官职业学院的论文排版系统研究姓 名&#xff1a; 宁夏警官职业学院论文学 号&#xff1a; 20185091612院 系&#xff1a; 宁夏警官职业学院信息学院专 业&#xff1a; 计算机指导教师&#xff1a; Megan教授…

oracle 闪回操作(flashback)

234390216 的留下学习 原文地址 http://haohaoxuexi.iteye.com/blog/1594391 Oracle的闪回功能可以在对数据库进行不完全恢复的情况下&#xff0c;对某一个指定的表进行恢复。闪回数据库是进行时间点恢复的新方法&#xff0c;它能够快速将Oracle恢复到以前的时间&#xff0c;以…

用法与区别_生抽老抽、蚝油味极鲜,总算搞清楚区别了,用法大不同,别用错了...

生抽老抽、蚝油味极鲜&#xff0c;总算搞清楚区别了&#xff0c;用法大不同&#xff0c;别再用错了各位读者朋友们大家好&#xff0c;感谢阅读我分享的美食文章&#xff0c;经验和大家一起共享&#xff0c;今天我要和大家分享的内容是&#xff1a;『生抽老抽、蚝油味极鲜&#…

2011年计算机二级试题,2011年3月全国计算机二级C++考试真题

2011年3月全国计算机二级C考试真题(21)有如下程序&#xff1a;#includeusing namespace std;void f1(int& x,int& y) {int zx; xy; yz;}void f2(int x;int y) {int zx; xy; yz;}int main(){int x10,y26;f1(x,y);f2(x,y);cout}运行时的输出结果是A)10B)16C)26D)36(22)有…

centos yum安装_centos7上yum安装碰到的坑

估计是之前更改过这个虚机的配置&#xff0c;故现在正常步骤安装完yum之后&#xff0c;无法使用&#xff0c;具体表现在 执行yum makecache的时候报错&#xff0c;现在no module name yum结果发现&#xff0c;无论怎么修改 usr/bin/yum的配置文件&#xff0c;都无法成功解决上面…

poj 1330 Nearest Common Ancestors LCA/DFS

题目链接: http://poj.org/problem?id1330 题意: 求出两点间的最近公共祖先。 题解: 第一种&#xff1a; 并查集维护&#xff1a;http://www.cnblogs.com/procedure2012/archive/2012/01/29/2331468.html 利用并查集在每次对子树进行遍历时进行合并&#xff0c;因为对以x为根…

设计模式的Java 8 Lambda表达式–装饰器设计模式

Decorator模式&#xff08;也称为Wrapper &#xff09;允许将行为静态或动态地添加到单个对象&#xff0c;而不会影响同一类中其他对象的行为。 可以将其视为子类的替代方法。 我们知道子类在编译时会增加行为&#xff0c;并且更改会影响原始类的所有实例。 另一方面&#xff0…

计算机管理home,电脑home键是什么意思

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。以win7为例&#xff0c;电脑键盘上的Home键是微软Windows操作系统中具有返回功能的按键&#xff0c;根据Windows不同的操作环境&#xff0c;home键的功能也会有区别。电脑(computer&…

ie浏览器网页版进入_IE浏览器打开网页提示无法打开Internet站点的解决办法

IE浏览器打开网页时提示Internet explorer无法打开站点&#xff0c;这是什么问题&#xff1f;Internet explorer打不开网页提示无法打开站点怎么办&#xff1f;请看下文五种解决办法。方法一&#xff1a;管理加载项打开浏览器—工具—Internet选项这时会出现“Internet选项”对…

go token验证_registry v2 解析以及如何实现token验证

提到registry v2&#xff0c;主要改进是支持并行pull镜像&#xff0c;镜像层id变成唯一的&#xff0c;解决同一个tag可能对应多个镜像的问题等等。如果还不太了解&#xff0c;可以且听我细细道来。首先不得不说的是v2 新加了一个概念Digest他是基于内容进行寻址(Content-addres…