[ 
https://issues.apache.org/jira/browse/MYFACES-1834?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12607113#action_12607113
 ] 

Leonardo Uribe commented on MYFACES-1834:
-----------------------------------------

After investigate in more deep about this issue, one idea mentioned by Simon 
seems to be the correct direction.

...........keeping a list of the files included so far, and returning true only 
if the same string is encountered twice? That would allow multiple inclusions, 
but not mess with ids for a single inclusion....

Based on this idea, I look on the jsp 2.1 spec to see if there is something 
that keep track of the included files used (on this API there should be 
something that do that). After reading a lot, it seems to be that 
javax.servlet.jsp.PageContext can help us in this objective.

There exists a scope called PageContext.PAGE_SCOPE. This is a scope like 
REQUEST_SCOPE but restricted to pages. Maybe this is the reason why the prefix 
used on jsf ri is pc. 

I'll try a solution using this scope and see what happens.

> suffix added to component id when including files
> -------------------------------------------------
>
>                 Key: MYFACES-1834
>                 URL: https://issues.apache.org/jira/browse/MYFACES-1834
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-252
>    Affects Versions: 1.2.2
>            Reporter: Simon Kitching
>            Priority: Minor
>
> In core 1.2 to 1.2.2, any use of jsp:include causes the ids of components in 
> the included file to have a random string appended to them.
> This results in some ugly ids. However more significantly, the id of a 
> component is not predictable even when an id attribute is explicitly assigned.
> In addition, this breaks the tomahawk forceId feature, because although the 
> namespace prefix is omitted the rest of the id changes making "forceId" 
> useless.
> The cause is class UIComponentClassicTagBase, where checkIfItIsInAnIterator() 
> returns true if the current component is in an included or forwarded page. 
> Later, the createUniqueId method adds a suffix to the user-specified if 
> member isInAnIterator is true.
> Unfortunately, documentation on why things are implemented as they are is 
> lacking.
> Checking for iteration is needed to support
>   <c:forEach ..>
>    <h:inputText id="name"/>
>   </c:forEach>
> Checking for includedOrForwarded might be to allow:
>     <jsp:include page="subPage.jsp" />
>     <jsp:include page="subPage.jsp" />
> However this is a very rare usage; support for this should not hurt everyone.
> And Sun Mojarra does *not* mess with the ids like this...testing shows
> that the ids of components are the same regardless of whether they are
> inline or in an included file.
> Maybe the "isInIterator" check could look to see whether the *same file* is 
> being included twice, eg by keeping a list of the files included so far, and 
> returning true only if the same string is encountered twice? That would allow 
> multiple inclusions, but not mess with ids for a single inclusion.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to