您无法使用<h:inputText>
. 它的名称由 JSF 根据客户端 ID 自动生成(而客户端 ID 又基于组件 ID 及其所有命名容器父级)。
无论如何,您基本上有 2 个选项来实现具体的功能要求:
如果没有其他命名容器父级,请指示父级表单不要添加其 ID:
<h:form prependId="false">
然而,这将导致<f:ajax>
失败。
使用纯 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" ... />