Hey all,

I believe I have answered my own question. I have reviewed the source code for the submitOnEvent component, and I can see that Mario is using the UIComponent.findComponent() method to locate the component referenced by the "for" attribute. That find method uses an algorithm described here [1].

Based on my reading of this description, I believe the short answer to my question is "Yes!!". If you use a simple "for" attribute like "submitButton", it will look in that same naming container. If, however, you prefix it like ":MyMainForm:MySubView:MySubForm:submitButton", you can specify precisely in which naming container to search for "submitButton", in this case "MyMainForm:MySubView:MySubForm".

Mario:

I like how you are doing the search at render-time. Since my solutions to this use-case were all simple client-side javascript functions, I never thought of that option. It's not that much harder to do in javascript, but this is better I think.

If I first test to ensure the more complicated use-case works as expected, do you mind if I update that wiki page with this additional detail about the options for use of the "for" attribute?

[1] http://java.sun.com/javaee/javaserverfaces/1.1_01/docs/api/javax/faces/component/UIComponent.html#findComponent(java.lang.String)

Regards,

Jeff Bischoff
Kenneth L Kurz & Associates, Inc.

Jeff Bischoff wrote:

I notice you didn't need to forceID the submit buttons on the example.
Do we run into any ID trouble with subviews, forms, subforms, etc?
Shouldn't be a problem. I use the JSF computed client-id, and if there
isn't a bug in this computation (there were in the past ;-) ) it should
work.

Okay, so if they are in the same context then it works without a forceid. But, devil's advocate, what happens if say the button is in a subform or subview, and the submitOnEvent tag is not. Is there any support for this? The button would then have a different client id prefix. Tomahawk buttons have a similar "actionFor" attribute, and in that case the syntax is like ":MyMainForm:MySubView:MySubForm". Are arguments in a form similar to this valid in the submitOnEvent component?

<h:outputLabel for="text2" value="submit via link on enter"/>
<h:inputText id="text2" value="#{submitOnEvent.strings.text2}"
onkeypress="javascript:notifyOriginalEvent()">
     <s:submitOnEvent for="submitLink" />
</h:inputText>

How does it know that onEnter() is the event to submit on?
Well, my first idea was to create a "submitOnEnter" component, then, we
decided to allow a broader use-case and allow to configure the event,
following the "convention-before-configuration" paradigm all default
values of the submitOnEvent are so that it will trigger "onkeypress" and
the "enter" key.

Yea, I admit it is somehow confusing, but once you know this it is a
real time saver ;-)

The convention is not so confusing, now that it is documented. It was simply hard trying to deduce it from the examples alone. Thanks for getting that page up so fast.

Regards,

Jeff Bischoff
Kenneth L Kurz & Associates, Inc.







Reply via email to