我需要渲染h:inputText
如下html输出:
<input id="yourName" type="text" name="name" />
<input id="email" type="text" name="email" />
But h:inputText
呈现与组件的客户端 ID 相同的名称属性。我想指定name
我自己的属性,而不是将客户端 ID 放入其中,以便输入字段可以显示来自先前在其他站点上为相同字段类型提交的值的有意义的自动完成建议。例如当我使用name="email"
通过电子邮件输入字段,用户会看到他之前在其他网站上提交的电子邮件 ID 的建议。
你无法使用它来实现它<h:inputText>
。它的名称是由 JSF 根据客户端 ID(又基于组件 ID 及其所有命名容器父级)自动生成的。
无论如何,您基本上有两种选择来实现具体的功能要求:
-
如果没有其他命名容器父级,则指示父级表单不要在前面添加其 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 添加自定义属性 (HTML5) 支持 (3.4):
<h:inputText type="email" ... />
Update从 JSF 2.2 开始,您终于可以轻松声明直通属性无需自定义渲染套件。
<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText a:type="email" ... />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)