web-dev-qa-db-fra.com

Les attributs de balise HTML personnalisés ne sont pas rendus par JSF

Je souhaite ajouter des attributs de balise spécifiques à iOS à mon formulaire de connexion. Si je regarde la source de ma page Web, les attributs de correction automatique, d'autocapitalisation et de vérification orthographique ne sont pas là. Quelle est la raison pour ça? J'utilise JSF 2.x.

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

C'est par conception. Vous ne pouvez spécifier que des attributs qui sont pris en charge par le composant JSF lui-même (c'est-à-dire qu'il est répertorié dans la liste d'attributs dans documentation des balises ). Vous ne pouvez pas spécifier des attributs supplémentaires arbitraires, ils seront tous ignorés.

Il existe plusieurs façons de résoudre ce problème:

  1. Si vous êtes déjà sur JSF 2.2+, spécifiez-le simplement comme attribut passthrough :

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

    (notez que j'utilise xmlns:a au lieu de xmlns:p pour éviter les conflits avec l'espace de noms par défaut PrimeFaces)

    Ou:

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

  2. Utilisez OmniFacesHtml5RenderKit. Depuis la version 1.5, il prend en charge la spécification d'attributs personnalisés par <context-param>. Voir aussi exemple de vitrine ou Javadoc .


  3. Créez un rendu personnalisé. Vous pouvez trouver plusieurs exemples concrets dans les réponses ci-dessous:

60
BalusC