I need to render h:inputText as following html output :
You can't achieve it using . Its name is autogenerated by JSF based on the client ID (which is in turn based on component ID and all of its naming container parents).
You've basically 2 options to achieve the concrete functional requirement anyway:
If there are no other naming container parents, instruct the parent form to not prepend its ID:
This will however cause to fail.
Use plain HTML elements instead of JSF components:
You only have to collect them yourself via @ManagedProperty on a request scoped bean:
@ManagedProperty("#{param.name}")
private String name;
@ManagedProperty("#{param.email}")
private String email;
And you'll miss JSF builtin validation/conversion facility and ajax magic.
There's however a completely different alternative: use HTML5 . This way the browser will autosuggest all previously entered emails on inputs of the very same type. This is not natively supported by . You can however use a custom render kit to get it to work, as answered in Adding custom attribute (HTML5) support to Primefaces (3.4):
Update as of JSF 2.2 you can finally easily declare passthrough attributes without needing a custom render kit.
<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...