3.12 Passthrough属性和HTML5友好的标记
HTML5为现有的HTML元素增加了一系列的新属性。这些属性包括input元素的type属性,可以支持例如电子邮件、网址、电话、数量、范围和日期类型的值:
这段代码可以让浏览器检查输入的文字是否为电子邮件格式。
此外,自定义数据属性,也被称为data-*属性,可以被定义为存储页面或应用程序私有的自定义数据。每个HTML元素可能有指定的任意数量、任何值的自定义数据属性:
这段代码引入了数据长度data-length为自定义数据属性。
这些属性不会被页面渲染,但可以通过JavaScript读取。该属性可以在JavaScript中被访问:
在JSF2.2之前,默认情况下,这些新引进的类型和data-*属性不被组件支持。JSF组件是否支持这组可用的属性,是由UIComponent和Renderer组合来决定。在某些情况下,属性的值由UIComponent或Renderer来解释(例如,h:panelGrid的列属性),而在其他情况下,该值直接传给用户代理(例如,h:inputText的lang属性)。在这两种情况下,UIComponent/Renderer事先知道这组可允许使用的属性。
JSF2.2引入了passthrough属性,这让我们可以列出任意键/值对,直接传递给用户代理,而不经由UIComponent或Renderer解释。可以用以下三种不同的方式来指定passthrough属性。
为http://xmlns.jcp.org/jsf/passThrough XML
命名空间分配短名称,作为属性的前缀:
在这段代码中,p是命名空间的短名称。
在一个组件内,嵌套的标签:
在这段代码中,type属性的类型为email时,被标记为是一个passthrough属性。
一个组件中内嵌标签:
#{user.myAttributes}
必须指向一个Map ,其中的值可以是文字或值表达式。
这种机制可以应用于任何JSF组件而不限于HTML5元素。