哪里有做枪网站的,网站首页广告图片伸缩代码又关闭,5118,品牌策划ppt案例javaserver随着2.0版的发布#xff0c;Facelet模板成为JSF规范的核心部分。 使用ui#xff1a;composition和ui#xff1a;decorate标记#xff0c;可以轻松构建复杂的页面#xff0c;同时仍保持标记的整洁。 模板在创建HTML表单时特别有用#xff0c;但… javaserver  随着2.0版的发布Facelet模板成为JSF规范的核心部分。 使用uicomposition和uidecorate标记可以轻松构建复杂的页面同时仍保持标记的整洁。 模板在创建HTML表单时特别有用但是不幸的是模板的确会导致xhtml文件中的重复从而破坏了良好软件设计的DRY不要自己重复原理 。 作为在JSF和Spring之间提供更深层集成的项目的一部分我开发了两个新组件旨在简化模板。 在探究新组件之前让我们看一下如何使用标准JSF模板构建典型表单。  表单模板的初始起点通常是为每个输入添加一些模板。 通常您需要额外的div或span标记以供CSS使用。 这是一个典型的例子  !-- /WEB-INF/pages/entername.xhtml --
ui:decoreate template/WEB-INF/layout/form.xhtmlh:inputText idfirstName labelFirst Name value#{bean.firstName}/ui:param namelabel valueFirst Name/ui:param namefor valuefirstName/
/ui:decorate
ui:decoreate template/WEB-INF/layout/form.xhtmlh:inputText idlastName labelLast Name value#{bean.lastName}/ui:param namelabel valueLast Name/ui:param namefor valuelastName/
/ui:decorate
!-- Many additional form elements --!-- /WEB-INF/layout/form.xhtml --
ui:compositiondiv classformElementspan classformLabelh:outputLabel for#{for} label#{label}/spanui:insert//div
/ui:composition 在这里我们可以看到表单上的每个项目都包含在div中并且表单标签被包裹在其他span中 。 标记中已经存在一些重复“ for”参数反映了组件ID。 我还给每个hinputText元素一个标签属性  为了获得更好的验证错误消息请在“标签” uiparam中重复此操作。 如果我们想用星号标记必填字段情况会变得越来越糟  !-- /WEB-INF/pages/entername.xhtml --
ui:decoreate template/WEB-INF/layout/form.xhtmlh:inputText idfirstName labelFirst Name value#{bean.firstName} requiredfalse/ui:param namelabel valueFirst Name/ui:param namefor valuefirstName/ui:param nameshowAsterisk valuefalse/
/ui:decorate
ui:decoreate template/WEB-INF/layout/form.xhtmlh:inputText idlastName labelLast Name value#{bean.lastName} requiredtrue/ui:param namelabel valueLast Name/ui:param namefor valuelastName/ui:param nameshowAsterisk valuetrue/
/ui:decorate
!-- Many additional form elements --!-- /WEB-INF/layout/form.xhtml --
ui:compositiondiv classformElementspan classformLabelh:outputLabel for#{for} label#{label}#{showAsterisk ?  * : }/spanui:insert//div
/ui:composition 非常令人沮丧的是我们需要传递uiparam项这些项与hinputText上已经指定的属性重复。 很容易看出即使是相对较小的表单我们也将最终在标记中重复很多。 我们需要的是一种获取有关模板中插入的组件的信息的方法即使我们不知道组件将是哪种类型。 我们需要的是scomponentInfo 。   scomponentInfo组件公开一个变量该变量包含有关所插入组件的信息。 此信息包括标签 组件clientID以及是否需要该组件。 通过检查插入的项目我们可以删除很多重复项  !-- /WEB-INF/pages/entername.xhtml --
ui:decoreate template/WEB-INF/layout/form.xhtmlh:inputText idfirstName labelFirst Name value#{bean.firstName} requiredfalse/
/ui:decorate
ui:decoreate template/WEB-INF/layout/form.xhtmlh:inputText idlastName labelLast Name value#{bean.lastName} requiredtrue/
/ui:decorate
!-- Many additional form elements --!-- /WEB-INF/layout/form.xhtml --
ui:compositions:componentInfo varinfodiv classformElementspan class#{info.valid ? formLabel : formErrorLabel}h:outputLabel for#{info.for} label#{info.label}#{info.required ?  * : }/spanui:insert//div/s:componentInfo
/ui:composition 我们现在可以做的其他事情就是判断插入的组件是否通过了验证。 请注意上面的示例将为无效的组件选择“ formErrorLabel ” CSS类。   拥有新的scomponentInfo组件的一个有趣的功能是所有uidecorate标签都变得相同。 我们已经删除了标签内的所有重复但是标签本身仍然重复了很多次。 在这里我们还有另外一个技巧可以通过引入新的sdecorateAll标记来提供帮助。 使用sdecorateAll允许对每个子组件应用一次模板。 这是更新的表单标记  !-- /WEB-INF/pages/entername.xhtml --
s:decoreateAll template/WEB-INF/layout/form.xhtmlh:inputText idfirstName labelFirst Name value#{bean.firstName} requiredfalse/h:inputText idlastName labelLast Name value#{bean.lastName} requiredtrue/!-- Many additional form elements --
/s:decorateAll!-- /WEB-INF/layout/form.xhtml --
ui:compositions:componentInfo varinfodiv classformElementspan class#{info.valid ? formLabel : formErrorLabel}h:outputLabel for#{info.for} label#{info.label}#{info.required ?  * : }/spanui: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.htmljavaserver