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@body" />
                                        <h:outputText value="Vorname" />
                                    </h:commandLink>
                                    <h:inputText value="#{cc.allFirstName}"
                                                 id="firstnameFilter"
                                                 style="width: 75px;"
                                                 >
                                        <a:ajax event="keyup"
                                                render="allPersonTable@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@body" />
                                        <h:outputText value="Nachname" />
                                    </h:commandLink>
                                    <h:inputText value="#{cc.allLastName}"
                                                 id="lastnameFilter"
                                                 style="width:75px;"
                                                 >
                                        <a:ajax event="keyup"
                                                render="allPersonTable@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@body" />
                                        <h:outputText value="Vorname" />
                                    </h:commandLink>
                                    <h:inputText value="#{cc.selectedFirstName}"
                                                 id="firstnameFilter"
                                                 style="width: 75px;"
                                                 >
                                        <a:ajax event="keyup"
                                                
render="selectedPersonTable@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@body" />
                                        <h:outputText value="Nachname" />
                                    </h:commandLink>
                                    <h:inputText value="#{cc.selectedLastName}"
                                                 id="lastnameFilter"
                                                 style="width:75px;"
                                                 >
                                        <a:ajax event="keyup"
                                                
render="selectedPersonTable@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

        
_______________________________________________
richfaces-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/richfaces-issues

Reply via email to