如何将占位符属性添加到JSF输入组件?

时间:2011-12-13 18:28:54

标签: jsf placeholder

在使用html5时,这行代码不应该使用占位符文本“填充我”来呈现inputtext字段吗?

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

我没有看到任何占位符文字。我认为那些不是JSF的东西都被传递给浏览器进行渲染了吗?

9 个答案:

答案 0 :(得分:64)

  

我认为那些不是JSF的东西都传递给了浏览器进行渲染?

因此这个假设是错误的。 JSF渲染器会忽略Unspecified个组件属性。

您基本上有以下选项可以让它发挥作用:

  1. 如果您已使用JSF 2.2或更高版本,请将其设置为passthrough attribute

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

    请注意,我使用了a(“attribute”)的XML名称空间前缀而不是p,如教程中所示,否则它会与默认的XML名称空间前缀p冲突PrimeFaces。

  2. <h:inputText>实施自定义渲染器,其中您明确检查并编写属性。

  3. 实现使用上述自定义渲染器的自定义组件。

  4. 实现基于JS的解决方案,您可以从DOM中获取元素并明确设置属性。

  5. 查找一个支持此功能的组件库。例如PrimeFaces为此目的有一个<p:watermark>,基于JS的浏览器优雅降级,不支持输入的placeholder属性。

  6. 寻找一个渲染工具包,为标准组件集添加HTML5支持。例如OmniFaces为此目的有一个Html5RenderKit

  7. 另见:

答案 1 :(得分:21)

如果使用Primefaces和JSF 2.0+,您可以使用placeholder属性或p:watermark实现它,或者当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" />

查看this回答。

答案 2 :(得分:9)

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

答案 3 :(得分:7)

如果您使用 RichFaces ,从版本4.3开始,您可以使用标记“rich:placeholder”来实现此目的,如here所示。基本上是:

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

答案 4 :(得分:2)

试试这个

<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,这对我来说很合适。

答案 5 :(得分:1)

这是非常容易和浏览器无关的代码,如BaluSc所说, 在primefaces中,使用p:watermark来获取所需的功能。 官方演示是HERE

答案 6 :(得分:0)

使用primeface 4.0。此版本下的版本不支持占位符属性。

  1. 使用名称空间xmlns:pt="http://java.sun.com/jsf/passthrough"

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

    请勿在{{1​​}}。

  3. 中插入新行

答案 7 :(得分:0)

使用占位符文本呈现输入字段的最简单方法是使用基本输入标记

示例:

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

注意:您不必包含任何名称空间

答案 8 :(得分:-1)

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

这适合我,试试吧!