Hi Martin,
Yes, I think that approach is fine, because the chances of a user-specified id,
or a JSF-generated id starting with the same value as
externalContext.encodeNamespace("") is close to zero IMHO.
Best Regards,
Neil
On May 11, 2010, at 5:53 PM, Martin Marinschek wrote:
> Hi Neil,
>
> On 5/11/10, Neil Griffin <[email protected]> wrote:
>> Since UIViewRoot does not implement NamingContainer, the JSR 301/329 specs
>> defines the PortletNamingContainerUIViewRoot [1] which, as its name
>> indicates, does indeed implement NamingContainer. This is what causes a nice
>> namespaced ID for all components in the rendered view. The code for this
>> typically looks something like this:
>>
>> public class PortletNamingContainerUIViewRoot extends UIViewRoot implements
>> NamingContainer, Serializable {
>>
>> private static final long serialVersionUID = 6744332823172081041L;
>> private String namespace;
>>
>> @Override
>> public String getContainerClientId(FacesContext facesContext) {
>>
>> if (namespace == null) {
>> ExternalContext externalContext =
>> facesContext.getExternalContext();
>> namespace = externalContext.encodeNamespace("");
>> }
>>
>> return namespace;
>> }
>
> yes, ok, I knew that. I just don't see how to exploit it, cause the
> hidden input with id javax.faces.ViewId will _not_ be namespaced. We
> could determine the namespace and only update the
> javax.faces.ViewId-elements within forms where the id starts with our
> namespace?
>
> best regards,
>
> Martin