Details
Description
New component Ice:portlet makes impossible to find any component inside with the following method:
public static UIComponent findComponent(String clientId, UIComponent base) in D2DViewHandler
Due to the algorithm of this method that tries to split clientId and find all naming containers preceding the component,
and the face that ice:portlet has the ClientId that match Portlet namespace but not the FacesId, findComponent cannot
find first naming container. I faced this issue in inputFile component, when UploadService tries to find InputFile component.
public static UIComponent findComponent(String clientId, UIComponent base) in D2DViewHandler
Due to the algorithm of this method that tries to split clientId and find all naming containers preceding the component,
and the face that ice:portlet has the ClientId that match Portlet namespace but not the FacesId, findComponent cannot
find first naming container. I faced this issue in inputFile component, when UploadService tries to find InputFile component.
Okay...fixing 1) above does fix 2) if you fix it correctly
. I've made the change to the Portlet component and tested ice:inputFile inside of an ice:portlet component running with Liferay and it works. It also works in a vanilla web application if you leave the ice:portlet component in the page.
3) was my misunderstanding of how the findComponent method was intended to work. You of course need to specify the full client ID of the component if you want it to drill down into the various naming containers.
Resolving as fixed.