[richfaces-issues] [JBoss JIRA] (RF-13645) contextMenu for extendedDataTable breaks after ajax render of contextMenu

Juraj Húska (JIRA) issues at jboss.org
Thu May 29 09:09:17 EDT 2014


    [ https://issues.jboss.org/browse/RF-13645?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12971630#comment-12971630 ] 

Juraj Húska edited comment on RF-13645 at 5/29/14 9:08 AM:
-----------------------------------------------------------

Reproduced on this example:
https://github.com/jhuska/richfaces-sanbox/tree/RF-13645

Steps to reproduce:
# clone, build and deploy example from above mentioned URL.
# load http://localhost:8080/richfaces-sanbox/
# Two ways to break the Context menu, *first one*
## invoke context menu in the first panel, first tab on any line
## click on its only item
## see that one more line in the {{extendedDataTable}} is added, however, subsequent {{contextMenu}} invoking does not work.
# *Second way*
## in the first panel, switch the {{tabPanel}}, and switch it back
## see that {{contextMenu}} can not be invoked anymore
## Note that adding {{contextMenu}} and {{table}} ids into the {{render}} attribute of {{tab}} does not help.

Note, the second panel is just informatory. It shows fixed RF-11973 4.3.5, which fixing seems to cause this issue. [This|https://github.com/richfaces4/components/commit/a0c4535de18dd74fa0965b9c2729734767e2a59f] commit.


was (Author: jhuska):
Reproduced on this example:
https://github.com/jhuska/richfaces-sanbox/tree/RF-13645

Steps to reproduce:
# clone, build and deploy example from above mentioned URL.
# load http://localhost:8080/richfaces-sanbox/
# Two ways to break the Context menu, *first one*
## invoke context menu in the first panel, first tab on any line
## click on its only item
## see that one more line in the {{extendedDataTable}} is added, however, subsequent {{contextMenu}} invoking does not work.
# *Second way*
## in the first panel, switch the {{tabPanel}}, and switch it back
## see that {{contextMenu}} can not be invoked anymore
## Note that adding {{contextMenu}} and {{table}} ids into the {{render}}} attribute of {{tab}} does not help.

Note, the second panel is just informatory. It shows fixed RF-11973 4.3.5, which fixing seems to cause this issue. [This|https://github.com/richfaces4/components/commit/a0c4535de18dd74fa0965b9c2729734767e2a59f] commit.

> contextMenu for extendedDataTable breaks after ajax render of contextMenu
> -------------------------------------------------------------------------
>
>                 Key: RF-13645
>                 URL: https://issues.jboss.org/browse/RF-13645
>             Project: RichFaces
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: component-menu
>    Affects Versions: 4.3.5, 4.3.6
>         Environment: WIN7 / JBOSS AS 7.1.1
>            Reporter: Steffen Michel
>            Assignee: Juraj Húska
>            Priority: Blocker
>
> Anything that causes an ajax re-render of a contextMenu which is attached to an extendedDataTable causes the contextMenu to subsequently be broken, triggering a JavaScript error instead of displaying the menu. The error seems to be this:
> {quote}
> Cannot call method 'show' of null in menu-base.js (at line 108 there is a call to this.popup, but popup is null)
> {quote}
> The reason I need to ajax re-render the context menu is because in my situtation it's held within a tab panel, and if it doesn't get re-rendered then it stops working after switching tabs using ajax mode (though it also breaks if the contextMenu is held outside of the tab panel, so that isn't a potential solution).
>  
> I created a stripped down example of my specific situation, with two extended data tables, each held in a different tab within a tab panel, and one context menu for each table. Changing tabs will cause the context menu to break without it explicitly being called in a render list. The same kind of break occurs if the contextMenu is called as part of any ajax render list:
> {code}
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
>     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich">  
> <h:head></h:head>  
> <h:body>  
>     <h:form id="testForm">  
>         <rich:tabPanel>  
>             <rich:tab id="tab1" header="Tab 1">  
>                 <rich:extendedDataTable value="#{testBean.items}" var="beanVar" id="table1">  
>                     <rich:column id="col1">                        <h:outputText value="#{beanVar}"/>  
>                     </rich:column>  
>                 </rich:extendedDataTable>  
>                 <rich:contextMenu id="contextMenu1" target="table1">  
>                     <rich:menuItem render="table1,contextMenu1" mode="ajax"  
>                                   actionListener="#{testBean.addItem}">Context Menu 1 Item</rich:menuItem>  
>                 </rich:contextMenu>  
>             </rich:tab>  
>             <rich:tab id="tab2" header="Tab 2">  
>                 <rich:extendedDataTable value="#{testBean.items}" var="beanVar2" id="table2">  
>                     <rich:column id="col2">  
>                         <h:outputText value="#{beanVar2}"/>  
>                     </rich:column>  
>                 </rich:extendedDataTable>  
>               <rich:contextMenu id="contextMenu2" target="table2">  
>                     <rich:menuItem render="table2,contextMenu2" mode="ajax"  
>                                   actionListener="#{testBean.addItem}">Context Menu 2 Item</rich:menuItem>  
>                 </rich:contextMenu>  
>             </rich:tab>  
>         </rich:tabPanel>  
>     </h:form>  
> </h:body>  
> </html>  
> {code}
> And a simple test bean:
> {code}
> import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ViewAccessScoped;  
> import javax.inject.Named;  
> import java.io.Serializable;  
> import java.util.ArrayList;import java.util.List;  
> @Named  
> @ViewAccessScoped  
> public class TestBean implements Serializable {  
>      List<String> items = new ArrayList<>();    
>     public TestBean() {  
>           items.add("one");         
>           items.add("two");  
>           items.add("three");  
>     }  
>     public void addItem(){  
>           items.add("another");  
>     }  
>      public List<String> getItems() {  
>           return items;  
>      }  
> } 
> {code}
> The above test situation works fine in richfaces 4.3.1, 4.3.2, 4.3.3 and 4.3.4, but breaks when upgraded to 4.3.5.Final.
>  
>  
> There was a different bug fixed in 4.3.5 which seems highly related to this, but opposite, making me wonder if whatever was done there caused this bug instead (but it's just a guess): RF-11973



--
This message was sent by Atlassian JIRA
(v6.2.3#6260)



More information about the richfaces-issues mailing list