On 8/20/05, Martin Marinschek <[EMAIL PROTECTED]> wrote: > So you are saying that for every tag that is rendered for a certain > component the component needs to be passed? > > My impression was that this parameter was only to be set for like the > main tag of this component, in this case the table component. > > If that is necessary, this will be a major change in the sources. Are > you going to open a jira-issue on this? >
I cannot speak to the specifics of the MyFaces implementation (haven't had time to look), but I'd like to discuss the motivation for why the startElement() has a component argument in the first place. Consider a visual development tool like Sun Java Studio Creator (for which I am the architect), where you drag a Data Table component onto the design surface. Now, let's assume that, within the context of a particular tool, you have bound the data table component to some underlying source of data, and created a bunch of column children components (with grandchildren for the actual data your table is presenting). Now, put yourself in the role of the developer using such a tool. She wants to change some properties on the individual component for a particular column. So, she moves her mouse over the visual representation of this component on the visual design surface, and clicks the mouse button. What happens next? In the ideal scenario, a tool will detect that the mouse click occurred over an instance of the detail component included in the corresponding column, and will highlight that detail component in the visual representation (and expose that component's properties on a property sheet). But that only works if the design surface can detect that the mouse click belongs to a *child* component of, say, the table being dispalyed ... otherwise, such a mouse click can only be attributed to the table component itself. The moral of this story is that *all* components should faithfully set the UIComponent property of the ResponseWriter.startElement() call. If you (as a component developer) do not do this, you will be at a competitive disadvantage to other components (with equivalent functionality) that understand how important it is to create tool-friendly components. If you are a component developer, you should *always* make sure that the UIComponent parameter to the startElement() call is the finest grained JSF component relevant to your particular use case. If the MyFaces components *never* specify a component argument to the startElement() call, then this is going to be a significant barrier to them ever being robustly supported by GUI-oriented design time IDEs. (((Side note to component developers -- put away your snide comments about what kind of development environment *you* use. This is all about what your *customers* use.))) Craig McClanahan
