Comment ajouter l'attribut placeholder au composant d'entrée JSF?

cette ligne de code ne devrait-elle pas rendre un champ inputtext avec le texte placé" fill me " en utilisant html5?

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

Je ne vois pas de texte placé. Je croyais que tout ce qui n'était pas JSF était passé au navigateur pour être rendu?

34
demandé sur BalusC 2011-12-13 22:28:54

9 réponses

je pensais que tout ce qui n'était pas JSF était passé au browswer pour être rendu?

cette hypothèse est donc erronée. non spécifié attributs du composant sont ignorés par la JSF convertisseurs.

Vous avez les options suivantes pour le faire fonctionner:

  1. si vous êtes déjà sur JSF 2.2 ou plus récent, définissez-le comme suit: a passthrough attribut .

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

    notez que j'utilise un préfixe D'espace de noms XML de a ("attribut") au lieu de p comme indiqué dans le tutoriel, car il serait autrement en conflit avec le préfixe D'espace de noms XML par défaut p de PrimeFaces.

  2. implémenter un renderer personnalisé pour <h:inputText> où vous cochez et écrivez explicitement l'attribut.

  3. mettre en œuvre un composant personnalisé qui utilise le rendu personnalisé susmentionné.

  4. implémentez une solution basée sur JS dans laquelle vous saisissez L'élément de DOM et définissez explicitement l'attribut.

  5. cherchez une bibliothèque de composants qui supporte cette boîte. PrimeFaces , par exemple, a un <p:watermark> pour cette fin d' nice js basé dégradation gracieuse pour les navigateurs qui ne supporte pas l'attribut placeholder sur les entrées.

  6. recherchez un kit de rendu qui ajoute le support HTML5 au jeu de composants standard. OmniFaces par exemple a un Html5RenderKit à cette fin.

voir aussi:

59
répondu BalusC 2017-05-23 12:17:39

vous pouvez l'obtenir soit avec l'attribut placeholder ou avec p:watermark si vous utilisez Primefaces et JSF 2.0+ ou, lorsque JSF 2.2 disponible, vous pouvez utiliser l'attribut pt:placeholder .

Primefaces

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

prise en charge de l'ancien navigateur (ajoute la solution 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 (sans 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>

qui essentiellement génère un HTML 5

<input placeholder="fill me" />

Check out ce réponse.

20
répondu Xtreme Biker 2017-05-23 12:17:39

avec JSF 2.2 vous pouvez passer par des attributs non spécifiés comme ceci:

<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>
9
répondu jmoreira 2013-07-30 19:54:13

dans le cas où vous utilisez RichFaces , à partir de la version 4.3, vous pouvez utiliser l'étiquette" rich:placeholder "à cet effet comme indiqué ici . En gros:

<h:inputText id="myInput">
    <rich:placeholder value="My placeholder text"></rich:placeholder>
</h:inputText>
7
répondu Jose Antonio Escobar Garcia 2014-01-02 14:42:48

Essayez cette

<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>

avec jQuery, ça me va.

2
répondu MarcoAndresito 2016-06-04 12:59:46

c'est très facile et le code indépendant du navigateur comme BaluSc dit, Dans primefaces, utilisez p:watermark pour obtenir la fonctionnalité requise. La démo officielle est ici

1
répondu Mr.Chowdary 2015-03-19 06:18:32

utilisez primeface 4.0. Les Versions au-dessous de cette version ne supportent pas l'attribut placeholder.

  1. utilisation de l'espace de nom xmlns:pt="http://java.sun.com/jsf/passthrough" .

  2. p:inputTextarea id="textAreaValue" pt:placeholder="your text"

    n'insérez pas de nouvelle ligne dans inputTextArea .

0
répondu Jayen Chondigara 2014-10-29 16:34:04

la façon la plus simple de rendre un champ d'entrée avec un texte placé est d'utiliser la étiquette d'entrée élémentaire

exemple:

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

Note: vous n'avez pas à inclure d'espaces de noms

0
répondu Ayoub Falah 2016-05-06 08:34:34

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

ça marche pour moi, essaie!

-1
répondu Haftom Tesfay 2016-04-24 14:38:44