Как добавить атрибут-заполнитель в компонент ввода JSF?
Не должна ли эта строка кода отображать поле inputtext с текстом-заполнителем "fill me" при использовании html5?
<h:inputText placeholder="fill me" />
Я не вижу никакого текста-заполнителя. Я думал, что все, что не было JSF, было передано браузеру для рендеринга?
9 ответов:
Таким образом, это предположение неверно. неопределенные атрибуты компонентов игнорируются средствами визуализации JSF.я думал, что все, что не было JSF, было передано браузеру для рендеринга?
У вас есть в основном следующие варианты, чтобы заставить его работать:
Если вы уже используете JSF 2.2 или более новую версию, установите его в качестве атрибута passthrough.
<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough"> <h:inputText a:placeholder="fill me" />
Обратите внимание, что я использую префикс пространства имен XML
a
("атрибут") вместоp
, как показано в учебнике, поскольку в противном случае он столкнулся бы с префиксом пространства имен XML по умолчаниюp
примитивов.Реализуйте пользовательский визуализатор для
<h:inputText>
, в котором вы явно проверяете и записываете атрибут.Реализуйте пользовательский компонент, который использует вышеупомянутый пользовательский визуализатор.
Реализуйте решение на основе JS, в котором вы берете элемент из DOM и явно устанавливаете атрибут.
Ищите библиотеку компонентов, которая поддерживает это из коробки. PrimeFaces например имеет
<p:watermark>
для этого с помощью nice JS основана изящная деградация для браузеров, которая не поддерживает атрибутplaceholder
на входах.Ищите Набор визуализации, который добавляет поддержку HTML5 к стандартному набору компонентов. OmniFaces , например, имеетHtml5RenderKit для этой цели.
См. также:
Вы можете достичь этого либо с помощью атрибута
placeholder
, либо с помощью атрибутаp:watermark
, Если используете Primefaces и JSF 2.0+, либо, если доступен JSF 2.2, вы можете использовать атрибутpt:placeholder
.Примитивы
<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" />
Проверьте этот ответ.
С помощью 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>
Если вы используете RichFaces, начиная с версии 4.3, вы можете использовать тег "rich:placeholder" для этой цели, как показано здесь. В основном:
<h:inputText id="myInput"> <rich:placeholder value="My placeholder text"></rich:placeholder> </h:inputText>
Попробуйте это
<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 это работает правильно для меня.
Это очень простой и независимый от браузера код, как сказал Балуск, В примитивах используйте
p:watermark
для получения требуемой функциональности. Официальная демонстрация здесь
Используйте primeface 4.0. Версии ниже этой версии не поддерживают атрибут placeholder.
Используйте пространство имен
xmlns:pt="http://java.sun.com/jsf/passthrough"
.
p:inputTextarea id="textAreaValue" pt:placeholder="your text"
Не вставляйте новую строку в
inputTextArea
.