【问题标题】:How to specify name attribute in h:inputText?如何在 h:inputText 中指定名称属性?
【发布时间】:2013-03-31 09:46:15
【问题描述】:

我需要将h:inputText 呈现为以下 html 输出:

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

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

【问题讨论】:

标签: jsf primefaces


【解决方案1】:

您无法使用&lt;h:inputText&gt; 实现它。它的名称由 JSF 基于客户端 ID 自动生成(而客户端 ID 又基于组件 ID 及其所有命名容器父级)。

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

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

    <h:form prependId="false">
    

    这将导致&lt;f:ajax&gt; 失败。

  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 &lt;input type="email"&gt;。这样,浏览器将自动建议所有先前输入的相同类型的电子邮件。 &lt;h:inputText&gt; 本身不支持此功能。但是,您可以使用自定义渲染工具包来使其工作,如 Adding custom attribute (HTML5) support to Primefaces (3.4) 中所回答:

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

更新自 JSF 2.2 起,您终于可以轻松声明 passthrough attributes 而无需自定义渲染工具包。

<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText a:type="email" ... />

【讨论】:

  • @BalusC 为什么添加prependId="false" 会导致&lt;f:ajax&gt; 失败?
  • @Tarik:它找不到要执行的组件。永远不要使用prependId="false"。他们不应该在 JSF 1.2 中添加它。
【解决方案2】:

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

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

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

而不是

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

希望这就是你要找的:)

【讨论】:

  • 如果页面中没有设置任何其他属性,这不会起作用,并且这些属性应该不被使用。请参阅已接受答案中的第 1 点。对此表示赞同的人也应该阅读接受的答案......
  • 可能一开始没听懂(以为是js调用)。但如果我现在这样做,他可以使用属性文件来调用具有以下语法的属性文件:value="#{prefix.properties}"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 2013-01-18
  • 2013-01-24
相关资源
最近更新 更多