You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Developer <de...@firimituri.com> on 2009/04/12 21:09:51 UTC

Trinidad 1.2 PPR completely broken due to serious core issue

Hi all,

Trinidad 1.2.11 is utterly broken (at least in this assumedly common setup) because it overwrites certain IDs by appending "j_id_1" to them. This breaks the PPR, which used to work impecably in Oracle ADF.

After more than 10 hours of investigation (!), by looking inside the Trinidad 1.2.11 source code and a lot of debugging and googling (where a similar issue is also reported, but unaddressed), I migrated to Trinidad 1.0.10, which works correctly on *exactly* the same setup, by not obliterating my IDs.

So here is my setup (I will not paste my entire project, because it is irrelevant, I am sure this is very easily reproduced by performing a similar setup):
  1.. Trinidad 1.2.11 over MyFaces-Core 1.2.6
  2.. Jetty 6.1.15
  3.. One JSPX page using JSP 2.0
  4.. One TAGX tag file, using JSP 2.0, which includes by means of jsp:doBody some content from the JSPX page
  5.. Four or five levels of tr:panelGroupLayout, which include some tr:inputText and tr:selectOneChoice components with given IDs
  6.. partialTriggers between some of the tr:panelGroupLayout components, which reference the same IDs I explicitly set
  7.. There are *no* subviews or any other naming containers outside the toplevel f:view
Surprisingly, when the number of panelGroupLayout levels varies, the PPR stops working with a message complaining about "cannot find component by ID...". Because what Trinidad 1.2 actually does is when it thinks a certain component renders its children repeatedly, e.g. tr:forEach, it starts appending "j_id_1", "j_id_2" a.s.o. to the given child ID. Which makes sense for a tr:forEach and maybe for some f:facet components, but not for a tr:panelGroupLayout component.

Looking at the Trinidad 1.2 source code it appears that it has some sort of algorithm for determining which component acts as a tr:forEach type of component, and if that is the case it starts appending the horrible "j_id_1" after any ID given to a child component.

So basically if I set the partialTriggers to use the ID followed by "j_id_1" everything works fine. There is no telling when this ID clobbering takes place, but it may have something to do with nested tr:panelGroupLayout and/or the fact that I am using a TAGX tag file.

I thought it was worth sharing this, since from my perspective it makes Trinindad 1.2 useless. I switched back to Trinidad 1.0 and everything works just fine. Quite disappointing though -- this should have been much better tested.

Of course, I can provide any details if the Trinidad developers are interested in fixing this issue.

Thanks,
Nick