[richfaces-issues] [JBoss JIRA] Created: (RF-11410) CommandButton in ExtentedDataTable

Florian Schoedel (JIRA) jira-events at lists.jboss.org
Sat Sep 17 16:35:26 EDT 2011


CommandButton in ExtentedDataTable
----------------------------------

                 Key: RF-11410
                 URL: https://issues.jboss.org/browse/RF-11410
             Project: RichFaces
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: component
    Affects Versions: 4.0.0.Final
         Environment: java 1.6.0_26
glassfish 3.1
Mojarra 2.1.0 (FCS 2.1.0-b11)
Seam Faces 3.0.1.Final
            Reporter: Florian Schoedel


I've created a composite component which contains two richfaces extented data tables. Each Datatable contains a column for a button to perform an action. (in the left datatable there is an 'add' button, on the right datatable a 'remove' button). Everything works fine until I try to attach a client behavior to the add / remove btns. I want to monitor my component for selection and removal of any value from the calling page.

The client behavior is triggered as expected, but the method behind the add and remove btns is executed twice! This also happens which actionListener attribute instead of action attribute. 

I've replaced richfaces ext. DataTable by h:dataTable and everything works fine. 

Here is the xml of my composite component:
-----
<?xml version='1.0' encoding='UTF-8' ?>
<!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:r="http://richfaces.org/rich"
      xmlns:a="http://richfaces.org/a4j"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:fn="http://java.sun.com/jsp/jstl/functions"
      xmlns:o="http://java.sun.com/jsf/composite/ezcomp"
      xmlns:cc="http://java.sun.com/jsf/composite"      >



    <!-- INTERFACE -->
    <cc:interface componentType="MultiplePersonSelectionComponent">
        <cc:attribute name="all" type="java.util.List" />
        <cc:attribute name="selection" type="java.util.List" />



        <cc:clientBehavior name="addPerson" event="action" targets="allPersonTable:addBtn" />
        <cc:clientBehavior name="removePerson" event="action" targets="selectedPersonTable:removeBtn" />





        <cc:attribute name="refresh" type="java.lang.String" default=""/>

    </cc:interface>

    <!-- IMPLEMENTATION -->
    <cc:implementation>

        
        <div id="#{cc.clientId}" style="width: 100%">


            
            
            <h:panelGrid columns="2" width="100%" columnClasses="pnlTop, pnlTop">
                <r:panel header="Alle Personen"  id="all" style="text-align: center;">



                    <r:extendedDataTable
                        value="#{cc.attrs.all}"
                        var="p"
                        id="allPersonTable"  
                        selectionMode="none"
                        rows="10"

                        >

                        <f:facet name="header">
                            <r:dataScroller for="allPersonTable" maxPages="5" id="dataScrollerTop" />
                        </f:facet>
                        <f:facet name="footer">
                            <r:dataScroller for="allPersonTable" maxPages="5" id="dataScrollerBottom"/>
                        </f:facet>



                        <r:column 
                            filterExpression="#{fn:containsIgnoreCase(p.firstName,cc.allFirstName)}"
                            sortBy="#{p.firstName}"
                            sortOrder="#{cc.allFirstNameSortOrder}"
                            >
                            <f:facet name="header">
                                <h:panelGrid columns="1" style="width:100%;" columnClasses="colTop">
                                    <h:commandLink action="#{cc.sortAllByFirstName}" >
                                        <a:ajax render="allPersonTable at body" />
                                        <h:outputText value="Vorname" />
                                    </h:commandLink>
                                    <h:inputText value="#{cc.allFirstName}"
                                                 id="firstnameFilter"
                                                 style="width: 75px;"
                                                 >
                                        <a:ajax event="keyup"
                                                render="allPersonTable at body "
                                                execute="@this"

                                                />

                                        <a:ajax event="blur"
                                                render="dataScrollerTop dataScrollerBottom"
                                                execute="@this"

                                                />





                                    </h:inputText>

                                </h:panelGrid>
                            </f:facet>
                            <h:outputText value="#{p.firstName}" />
                        </r:column>



                        <r:column  
                            filterExpression="#{fn:containsIgnoreCase(p.lastName,cc.allLastName)}"
                            sortBy="#{p.lastName}"
                            sortOrder="#{cc.allLastNameSortOrder}">

                            <f:facet name="header">
                                <h:panelGrid columns="1"
                                             style="width: 100%;"
                                             columnClasses="colTop">
                                    <h:commandLink action="#{cc.sortAllByLastName}" >
                                        <a:ajax render="allPersonTable at body" />
                                        <h:outputText value="Nachname" />
                                    </h:commandLink>
                                    <h:inputText value="#{cc.allLastName}"
                                                 id="lastnameFilter"
                                                 style="width:75px;"
                                                 >
                                        <a:ajax event="keyup"
                                                render="allPersonTable at body "
                                                execute="@this"
                                                />

                                    </h:inputText>

                                </h:panelGrid>
                            </f:facet>
                            <h:outputText value="#{p.lastName}" />
                        </r:column>



                        <r:column>
                            <f:facet name="header">
                                <h:outputText value="Auswahl" />
                            </f:facet>

                            <h:panelGroup id="addBtnGroup">
                                <h:commandButton value="add"
                                                 action="#{cc.add(p)}"
                                                 disabled="#{cc.attrs.selection.contains(p)}"
                                                 id="addBtn" >
                                    <f:ajax event="action"
                                            render=":#{cc.clientId}:selectedPersonTable @this #{cc.attrs.refresh}"
                                            />
                                </h:commandButton>
                            </h:panelGroup>
                        </r:column>



                    </r:extendedDataTable>


                </r:panel>

                <r:panel header="Auswahl" id="selection" style="text-align: center;">


                    <r:extendedDataTable  
                        value="#{cc.attrs.selection}"
                        var="p" id="selectedPersonTable"
                        rows="10" style="width: 100%"
                        selectionMode="none">



                        <f:facet name="header">
                            <r:dataScroller for="selectedPersonTable" id="selectedDataScrollerTop" maxPages="5" />
                        </f:facet>

                        <f:facet name="footer">
                            <r:dataScroller for="selectedPersonTable" id="selectedDataScrollerBottom" maxPages="5" />
                        </f:facet>




                        <r:column
                            filterExpression="#{fn:containsIgnoreCase(p.firstName,cc.selectedFirstName)}"
                            sortBy="#{p.firstName}"
                            sortOrder="#{cc.selectedFirstNameSortOrder}"
                            >
                            <f:facet name="header">
                                <h:panelGrid columns="1" style="width:100%;" columnClasses="colTop">
                                    <h:commandLink action="#{cc.sortSelectedByFirstName}" >
                                        <a:ajax render="selectedPersonTable at body" />
                                        <h:outputText value="Vorname" />
                                    </h:commandLink>
                                    <h:inputText value="#{cc.selectedFirstName}"
                                                 id="firstnameFilter"
                                                 style="width: 75px;"
                                                 >
                                        <a:ajax event="keyup"
                                                render="selectedPersonTable at body "
                                                execute="@this"

                                                />

                                        <a:ajax event="blur"
                                                render="selectedDataScrollerTop selectedDataScrollerBottom"
                                                execute="@this"

                                                />





                                    </h:inputText>

                                </h:panelGrid>
                            </f:facet>
                            <h:outputText value="#{p.firstName}" />
                        </r:column>



                        <r:column
                            filterExpression="#{fn:containsIgnoreCase(p.lastName,cc.selectedLastName)}"
                            sortBy="#{p.lastName}"
                            sortOrder="#{cc.selectedLastNameSortOrder}">

                            <f:facet name="header">
                                <h:panelGrid columns="1"
                                             style="width: 100%;"
                                             columnClasses="colTop">
                                    <h:commandLink action="#{cc.sortSelectedByLastName}" >
                                        <a:ajax render="selectedPersonTable at body" />
                                        <h:outputText value="Nachname" />
                                    </h:commandLink>
                                    <h:inputText value="#{cc.selectedLastName}"
                                                 id="lastnameFilter"
                                                 style="width:75px;"
                                                 >
                                        <a:ajax event="keyup"
                                                render="selectedPersonTable at body "
                                                execute="@this"
                                                />

                                    </h:inputText>

                                </h:panelGrid>
                            </f:facet>
                            <h:outputText value="#{p.lastName}" />
                        </r:column>





                        <r:column>
                            <f:facet name="header">
                                <h:outputText value="" />
                            </f:facet>
                            <h:panelGroup id="removeBtnGroup">
                                <h:commandButton   value="remove"
                                                   action="#{cc.remove(p)}"
                                                   id="removeBtn" >
                                    <f:ajax event="action"
                                            render=":#{cc.clientId}:allPersonTable :#{cc.clientId}:selectedPersonTable #{cc.attrs.refresh}"
                                            />
                                </h:commandButton>
                            </h:panelGroup>

                        </r:column>




                    </r:extendedDataTable >




                   


                </r:panel>



              </h:panelGrid>



        </div>

    </cc:implementation>
</html>


-----

And there's the place I use it: 

-----
<o:MultiplePersonSelection all="#{ivb.persons}" selection="#{ivb.selection}"
                                           refresh="">
                                        <f:ajax event="addPerson" render=":myForm:listing" />
                                        <f:ajax event="removePerson" render=":myForm:listing" />
                    
                </o:MultiplePersonSelection>


 <h:panelGroup  id="listing">

                <h:dataTable value="#{ivb.selection}" var="p" id="liste">
                    <h:column>
                        #{p.firstName}
                    </h:column>
                    <h:column>
                        #{p.lastName}
                    </h:column>

                </h:dataTable>



       </h:panelGroup>




----




--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the richfaces-issues mailing list