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

Другие вопросы по тегам