自定义HTML标记属性不是由JSF呈现的

我想添加一些iOS特定的标签属性到我的login表单。 如果我看看我的网页源代码,autocorrect,autocapitalize和拼写检查的属性不存在。 这是什么原因? 我正在使用JSF 2.x.

<h:inputText id="user-name" forceId="true" value="#{login.username}" style="width:120px;" autocorrect="off" autocapitalize="off" spellcheck="false" /> 

这是devise。 您只能指定JSF组件本身支持的属性(即,它在标记文档的属性列表中列出)。 你不能指定任意的附加属性,它们将被全部忽略。

有几种方法可以解决这个问题:

  1. 如果您已经使用JSF 2.2+,只需将其指定为passthrough属性 :

     <html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough"> ... <h:inputText ... a:autocorrect="off" /> 

    (请注意,我使用xmlns:a而不是xmlns:p来避免与PrimeFaces默认命名空间发生冲突)

    要么:

     <html ... xmlns:f="http://xmlns.jcp.org/jsf/core"> ... <h:inputText ...> <f:passThroughAttribute name="autocorrect" value="off" /> </h:inputText> 

  2. 使用OmniFaces Html5RenderKit 。 自1.5版本以来,它支持通过<context-param>指定自定义属性。 另请参阅展示示例或Javadoc 。


  3. 创build一个自定义的渲染器。 你可以在下面的答案中find几个具体的例子:

    • 如何让JSF通过HTML属性
    • 在JSF2 h:inputText组件中使用引导相关标签
    • 如何呈现<h:outputLink>的自定义属性?
    • InputText PrimeFace不应用maxlength
    • 将自定义属性添加到JSF中的Primefaces自动完成组件