11

我需要呈现h:inputText如下 html 输出:

  <input id="yourName" type="text" name="name" />
  <input id="email" type="text" name="email" />

h:inputText呈现与组件的客户端 ID 相同的名称属性。我想自己指定name属性,而不是将客户端 ID 放入其中,以便输入字段可以显示来自先前在其他站点上为相同字段类型提交的值的有意义的自动完成建议。例如,当我使用name="email"电子邮件的输入字段时,会向用户显示他之前在其他网站上提交的电子邮件 ID 的建议。

4

2 回答 2

17

您无法使用<h:inputText>. 它的名称由 JSF 根据客户端 ID 自动生成(而客户端 ID 又基于组件 ID 及其所有命名容器父级)。

无论如何,您基本上有 2 个选项来实现具体的功能要求:

  1. 如果没有其他命名容器父级,请指示父级表单不要添加其 ID:

    <h:form prependId="false">
    

    然而,这将导致<f:ajax>失败。

  2. 使用纯 HTML 元素而不是 JSF 组件:

    <input name="name" value="#{bean.name}" />
    <input name="email" value="#{bean.email}" />
    

    @ManagedProperty您只需通过请求范围的 bean自己收集它们:

    @ManagedProperty("#{param.name}")
    private String name;
    
    @ManagedProperty("#{param.email}")
    private String email;
    

    你会错过 JSF 内置的验证/转换工具和 ajax 魔法。

然而,还有一个完全不同的选择:使用 HTML5 <input type="email">。这样,浏览器将自动建议所有先前输入的相同类型的电子邮件。这不是本机支持的<h:inputText>。但是,您可以使用自定义渲染工具包来使其工作,如向 Primefaces (3.4) 添加自定义属性 (HTML5) 支持中所回答的那样:

<h:inputText type="email" ... />

从 JSF 2.2 开始更新,您终于可以轻松地声明传递属性,而无需自定义渲染工具包。

<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText a:type="email" ... />
于 2013-04-09T11:09:30.033 回答
-1

您可以在不指定 name 属性的情况下做您想做的事情。id 属性就足够了。根据示例尝试以下操作:

< h:inputText id="email" ... />

...
$("#email input").click(function (event) {
...
}

代替

$("#email input[name='email']").click(function (event) 

希望这就是你要找的:)

于 2018-01-05T04:49:50.357 回答