Пользовательские атрибуты тегов HTML не отображаются JSF

Я хочу добавить некоторые атрибуты тегов iOS в мою форму входа. Если я посмотрю на источник моей веб-страницы, атрибутов автозамены, автокапитализации и проверки орфографии там нет. В чем причина этого? Я использую JSF 2.x.

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

1 ответов


это дизайн. Вы можете указать только атрибуты, которые являются поддерживает самим компонентом 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. создать пользовательский рендерер. Вы можете найти несколько конкретных примеров в ответах ниже: