Подтвердить что ты не робот

Как добавить атрибут placeholder в компонент ввода JSF?

Должна ли эта строка кода визуализировать поле ввода текста с текстом заполнителя "заполнить меня" при использовании html5?

<h:inputText placeholder="fill me" />

Я не вижу никакого текста заполнителя. Я думал, что все, что не было JSF, было передано браузеру для рендеринга?

4b9b3361

Ответ 1

Я думал, что все, что не было JSF, было передано в browswer для рендеринга?

Это предположение, таким образом, неверно. Unspecified атрибуты компонента игнорируются рендерерами JSF.

У вас есть в основном следующие параметры, чтобы заставить его работать:

  • Если вы уже используете JSF 2.2 или новее, установите его как атрибут passthrough.

    <... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
    
    <h:inputText a:placeholder="fill me" />
    

    Обратите внимание, что я использую префикс пространства имен XML a ( "attribute" ) вместо p, как показано в учебнике, так как в противном случае он столкнулся бы с префиксом пространства имен по умолчанию p в PrimeFaces.

  • Внедрите собственный рендерер для <h:inputText>, в котором вы явно проверяете и записываете атрибут.

  • Внедрение настраиваемого компонента, который использует вышеупомянутый пользовательский рендерер.

  • Внедрите решение на основе JS, в котором вы захватываете элемент из DOM и явно устанавливаете атрибут.

  • Найдите библиотеку компонентов, которая поддерживает это. PrimeFaces, например, имеет <p:watermark> для этого цель с прекрасным ухудшением JS для браузеров, который не поддерживает атрибут placeholder на входах.

  • Найдите набор рендеринга, который добавит поддержку HTML5 к стандартным наборам компонентов. OmniFaces, например, имеет Html5RenderKit для этого цель.

См. также:

Ответ 2

Вы можете достичь этого либо с помощью атрибута placeholder, либо с помощью p:watermark, если используете Primefaces и JSF 2.0+, или, если доступно JSF 2.2, вы можете использовать атрибут pt:placeholder.

Primefaces

<p:inputText id="search_input_id" value="#{watermarkBean.keyword}" 
    required="true" label="Keyword" placeholder="fill me" />  

Поддержка старого браузера (добавляет решение JS):

<p:inputText id="search_input_id" value="#{watermarkBean.keyword}" 
    required="true" label="Keyword" />  
<p:watermark for="search_input_id" value="fill me" />

JSF 2.2 (без PF)

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:pt="http://xmlns.jcp.org/jsf/passthrough">
    <h:head>
    </h:head>
    <h:body>
        <h:inputText value="#{bean.value}" pt:placeholder="fill me"/>
    </h:body>
</html>

Что в основном генерирует HTML 5

<input placeholder="fill me" />

Отметьте этот ответ.

Ответ 3

В JSF 2.2 вы можете пропустить неопределенные атрибуты:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://xmlns.jcp.org/jsf/passthrough"
>

    <h:inputText p:placeholder="fill me"></h:inputText>

Ответ 4

Если вы используете RichFaces, начиная с версии 4.3, для этой цели вы можете использовать тег "rich: placeholder", как показано здесь. В основном:

<h:inputText id="myInput">
    <rich:placeholder value="My placeholder text"></rich:placeholder>
</h:inputText>

Ответ 5

Это очень простой и независимый от браузера код, как сказал BaluSc, В простых функциях используйте p:watermark, чтобы получить требуемую функциональность. Официальное демо ЗДЕСЬ

Ответ 6

Попробуйте это

<h:inputText id="name" value="#{login.userId}" class="aux1" />
<h:inputSecret id="password" value="#{login.password}" redisplay="true" class="aux2" autocomplete="off" />

<script>
  $('.aux1').attr('placeholder', 'Introducir Usuario');
  $('.aux2').attr('placeholder', 'Introducir Contraseña');
</script>

С jQuery это работает правильно для меня.

Ответ 7

Использовать primeface 4.0. Версии ниже этой версии не поддерживают атрибут placeholder.

  • использовать пространство имен xmlns:pt="http://java.sun.com/jsf/passthrough".

  • p:inputTextarea id="textAreaValue" pt:placeholder="your text"

    не вставляйте новую строку в inputTextArea.

Ответ 8

<h:head>
</h:head>
<h:body>
    <h:inputText value="#{bean.value}" placeholder="fill me"/>
</h:body>

Это работает для меня, попробуйте!

Ответ 9

Самый простой способ визуализации поля ввода с текстом-заполнителем - использовать тег элементарного ввода

Пример:

<input type="text" placeholder="Fill me" value="#{EL}"/>

Примечание. вам не нужно включать какие-либо пространства имен