Tested. It works now :) MYFACES-243 can be closed.
Grant Smith wrote:
I'll test it this afternoon. For some reason svn.apache.org is
unreachable for me this morning.
sean schofield (JIRA) wrote:
[
http://issues.apache.org/jira/browse/MYFACES-243?page=comments#action_65928
]
sean schofield commented on MYFACES-243:
----------------------------------------
Patch has been applied. Grant, can you verify problem has been
resolved and then close this issue? I wasn't able to see how the
original patch failed (only checked the simple examples though.)
ClientId not used, so JSCookMenu fires multiple actions in tables
-----------------------------------------------------------------
Key: MYFACES-243
URL: http://issues.apache.org/jira/browse/MYFACES-243
Project: MyFaces
Type: Bug
Versions: 1.0.9 beta
Reporter: Neal Haggard
Assignee: sean schofield
Fix For: Nightly Build
Attachments: patch.txt, patch2.txt
The fix to add the id to the action (so that the proper action can
be fired on decode) works fine for multiple JSCookMenu components on
the same page, however when a JSCookMenu is placed in something that
uses the component as a template (such as within a HtmlDataTable's
Column), the NamingContainer doesn't get invoked, so a click on an
action triggers once for every row in the table.
The simple fix is to change the call to getId() to
getClientId(context), however, that also requires a change to
processDecodes, to change the .indexOf(":") to .lastIndexOf(":").
There are also some other underlying issues with the id in the rest
of the component. The Javascript that defines the menu uses a
generic variable name of 'menuBar'. If you have more than one
JSCookMenu on the page with different CommandNavigationItems, you
will only get the last one.
The solution to this is to supplement the JavaScript variable name
with the clientId, much like the div later in encodeEnd.
I've tied all these changes together by creating a private method
called getMenuId() which encapsulates the logic behind getting the
clientId(context) and converting all the colons(:) to
underscores(_). Then in encodeChildren(), encodeEnd() and
encodeNavigationMenuItems(), I use this method, so that the same id
is used throughout.
Also included in my patch is a quick-fix to allow null labels to not
print out the default value (1).
Hopefully this will be a useful addition to the MyFaces Community.
.