2013-05-21 71 views
24

Chcę dodać niektóre atrybuty znaczników systemu iOS do mojego formularza logowania. Jeśli przyjrzeć się mojemu źródłu strony internetowej, nie ma tam atrybutów autokorekty, autokrytowania i sprawdzania pisowni. Jaki jest tego powód? Używam JSF 2.x.Niestandardowe atrybuty znaczników HTML nie są renderowane przez JSF

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

Odpowiedz

51

Jest to zgodne z projektem. Można określić tylko atrybuty, które są supported przez sam składnik JSF (tj. Jest on wymieniony na liście atrybutów w tag documentation). Nie można określić dowolnych dodatkowych atrybutów, wszystkie będą jawnie ignorowane.

Istnieje kilka sposobów, aby rozwiązać ten problem:

  1. Jeśli jesteś już na JSF 2.2 lub nowszym, wystarczy podać ją jako passthrough attribute:

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

    (zauważ, że używam xmlns:a zamiast xmlns:p, aby uniknąć konfliktu z domyślną przestrzenią nazw PrimeFaces)

    Lub:

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

  2. Zastosowanie OmniFacesHtml5RenderKit. Od wersji 1.5 obsługuje on niestandardowe atrybuty przez <context-param>. Zobacz także showcase example lub .


  3. Utwórz niestandardowy renderer. Można znaleźć kilka konkretnych przykładów w poniższych odpowiedzi:

+0

Dzięki BalusC - jesteś wielki! – Jochen

+1

Wielkie dzięki BalusC, jesteś mistrzem JSF :) prawie wszystko, czego potrzebuję, jest odpowiedziana przez ciebie .. – Simego

+0

To działa dla mnie, o ile używam 'http://xmlns.jcp.org/jsf/passthrough 'zamiast starej przestrzeni nazw java.sun.com. – Joost