I have a question about the idea behind the fact, that only UIForm
got the attribute prependId
. Why is the attribute not specified in the Nam
Indeed, UIComponent#findComponent()
as done by <f:ajax render>
fails when using <h:form prependId="false">
. This problem is known and is a "Won't fix": JSF spec issue 573.
In my humble opinion, they should never have added the prependId
attribute to the UIForm
during the JSF 1.2 ages. It was merely done to keep j_security_check
users happy who would like to use a JSF form with JSF input components for that (j_security_check
requires exact input field names j_username
and j_password
which couldn't be modified by configuration). But they didn't exactly realize that during JSF 1.2 another improvement was introduced which enables you to just keep using <form>
for that instead of sticking to <h:form>
. And then CSS/jQuery purists start abusing prependId="false"
to avoid escaping the separator character :
in their poorly chosen CSS selectors.
Just don't use prependId="false"
, ever.
For j_security_check
, just use <form>
or the new Servlet 3.0 HttpServletRequest#login()
. See also Performing user authentication in Java EE / JSF using j_security_check.
For CSS selectors, in case you absolutely need an ID selector (and thus not a more reusable class selector), simply wrap the component of interest in a plain HTML <div>
or <span>
.