6 Replies Latest reply on Feb 15, 2007 11:05 AM by gavin.king

    Please Help (multiple row operations in a data table)

    ask4saif

      Dear fellows,

      the problem is i want to perform multiple row deletion in a datatable. here is my code, it is the exact copy of the code given in the dvd example.

      <h:dataTable id="hotelslist" rows="5" value="#{allHotelsList}" var="hotels" styleClass="scrollerTable" headerClass="standardTable_Header" footerClass="standardTable_Header" columnClasses="column_style,column_style,columna_style1" >
      <h:column>
       <f:facet name="header">
       <h:outputText value="Select" />
       </f:facet>
       <h:selectBooleanCheckbox value="#{hotelSelections[hotels]}" />
      </h:column>
      
      <h:column>
       <f:facet name="header">
       <h:outputText value="Name"/>
       </f:facet>
       <h:outputText value="#{hotels.name}"/>
      </h:column>
      
      <h:column>
       <f:facet name="header">
       <h:outputText value="City"/>
       </f:facet>
       <h:outputText value="#{hotels.city}"/>
      </h:column>
      
      <h:column>
       <f:facet name="header">
       <h:outputText value="Contact Number"/>
       </f:facet>
       <h:outputText value="#{hotels.phone}"/>
      </h:column>
      
      <h:column>
       <f:facet name="header">
       <h:outputText value="Action" />
       </f:facet>
       <h:commandButton value="Details" action="#{HotelsAction.showHotelDetails}" image="../images/details.gif" />
      
      </h:dataTable>
      
      
      <h:commandButton action="#{ERegHotelsAction.deleteAll}" value="DeleteAll"/>
      


      In the above mentioned code, whenever i press any command button the associated action is not called by the component and the same page is redisplayed.

      and if i remove the "[hotels]" EL exp from the checkbox value then it start working. I dont know what is going on, and what is the exact problem.

      can anyone help me on this matter.

      thanks alot in advance



        • 1. Re: Please Help (multiple row operations in a data table)
          ask4saif

          any body help!

          • 2. Re: Please Help (multiple row operations in a data table)
            gavin.king

            If you want help, you need to show more code than that.

            (1) The rest of the page, including the h:form element
            (2) The Seam component you are trying to call

            • 3. Re: Please Help (multiple row operations in a data table)
              ask4saif

              Thanx gavin for your reply, its very nice to see you helping all the people. thank you very much.

              here is the code:

              public class SecretQuestionsAction implements SecretQuestionsLocal{
              
              
               @PersistenceContext(unitName="Database")
               protected EntityManager em;
              
               @In(required=false,value="SecretQuestions")
               @Out(required=false,value="SecretQuestions")
               private SecretQuestions secretQuestions;
              
               @DataModel
               private List <SecretQuestions> allSecretQuestionsList;
              
               @DataModelSelection(value="allSecretQuestionsList")
               private SecretQuestions selectedSecretQuestion;
              
               @In
               private Context sessionContext;
              
               @In(create=true)
               FacesMessages facesMessages;
              
               String acknowledge = null;
              
               @Out(scope=ScopeType.CONVERSATION,required=false)
               Map<SecretQuestions, Boolean> secQuestionSelections;
              
              
               /*--------------------------------------------------------------------*/
               public String deleteSelection(){
               System.out.println("In the delete selection method.");
               for (SecretQuestions item: allSecretQuestionsList) {
               Boolean selected = secQuestionSelections.get(item);
               if (selected!=null && selected) {
               secQuestionSelections.put(item, false);
               System.out.println(item.toString());
               // delete(item);
              
               }
               }
              
               return null;
               }
               /*--------------------------------------------------------------------*/
              
              


              This was the method i want to call from my xhtml page. And now this is the jsf code in my xhtml page.

              
              <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
              <ui:composition xmlns="http://www.w3.org/1999/xhtml"
               xmlns:s="http://jboss.com/products/seam/taglib"
               xmlns:ui="http://java.sun.com/jsf/facelets"
               xmlns:f="http://java.sun.com/jsf/core"
               xmlns:h="http://java.sun.com/jsf/html"
               xmlns:c="http://java.sun.com/jstl/core"
               xmlns:t="http://myfaces.apache.org/tomahawk" >
              <html>
              <head>
               <title>:: Secret Questions List </title>
              />
              
              </head>
              <body>
               <f:view>
               <ui:include src="../menus/setupmenu.xhtml"/>
              
               <f:subview id="allSecretQuestionsList" rendered="#{!empty(allSecretQuestionsList)}">
              
              <table align="center">
               <tr>
               <td align="center">
               <f:verbatim>
               <p><h4>Secret Questions List</h4></p>
               </f:verbatim>
               </td>
               </tr>
               <tr>
               <td align="center">
               <h:form>
               <h:dataTable id="secquestionslist" rows="5" value="#{allSecretQuestionsList}" var="SecretQuestions" >
               <h:column>
               <f:facet name="header">
               <h:outputText value="Select" />
               </f:facet>
               <h:selectBooleanCheckbox value="#{secQuestionSelections[SecretQuestions]}"/>
               </h:column>
              
               <h:column>
               <f:facet name="header">
               <h:outputText value="Question"/>
               </f:facet>
               <h:outputText value="#{SecretQuestions.secretQuestion}"/>
               </h:column>
              
               <h:column>
               <f:facet name="header">
               <h:outputText value="Action" />
               </f:facet>
               <h:commandButton value="Details" action="#{SecretQuestionsAction.showSecretQuestionDetails}"
               <c:if test="${CustomerLoginAction.update}">
               <h:commandButton value="Update" action="#{SecretQuestionsAction.loadSecretQuestion}"
               </c:if>
              
               </h:column>
               </h:dataTable>
              
               <h:commandButton action="#{SecretQuestionsAction.deleteSelection}" value="Delete Selected"/>
              
               <h:panelGrid columns="1" align="center">
               <t:dataScroller id="scroll_1"
               for="secquestionslist"
               fastStep="5"
               pageCountVar="pageCount"
               pageIndexVar="pageIndex"
               styleClass="scroller"
               paginator="true"
               paginatorMaxPages="5"
               paginatorTableClass="paginator"
               paginatorActiveColumnStyle="font-weight:bold;"
               immediate="true" >
               <f:facet name="first" >
               <t:graphicImage url="../images/arrow-first.gif" border="1" />
               </f:facet>
               <f:facet name="last">
               <t:graphicImage url="../images/arrow-last.gif" border="1" />
               </f:facet>
               <f:facet name="previous" >
               <t:graphicImage url="../images/arrow-previous.gif" border="1" />
               </f:facet>
               <f:facet name="next">
               <t:graphicImage url="../images/arrow-next.gif" border="1" />
               </f:facet>
               <f:facet name="fastforward">
               <t:graphicImage url="../images/arrow-ff.gif" border="1" />
               </f:facet>
               <f:facet name="fastrewind">
               <t:graphicImage url="../images/arrow-fr.gif" border="1" />
               </f:facet>
               </t:dataScroller>
               </h:panelGrid>
               </h:form>
               </td>
               </tr>
              
               <tr>
               <td colspan="5" align="left">
               <c:if test="${CustomerLoginAction.create}">
               <h:form id="navigform">
               <h:commandButton id="newsecretquestion" value="Add Secret Qustion" action="#{SecretQuestionsAction.toCreateForm}" />
               </h:form>
               </c:if>
               </td>
               </tr>
               </table>
              </f:subview>
              </f:view>
              </body>
              </html>
              
              </ui:composition>
              
              


              Now the problem is whenever i press some command button, it performs no action. And if i remove this part "[SecretQuestions]" from the value attribute of checkbox, the buttons start working. But I can not do multiple deletion. I am really stuck here.

              thanx in advance

              • 4. Re: Please Help (multiple row operations in a data table)
                gavin.king

                SecretQuestionsAction should have an @Name annotation.

                • 5. Re: Please Help (multiple row operations in a data table)
                  ask4saif

                  thanx gavin for your reply,

                  I am really sorry to write to you so late.

                  you wrote:


                  SecretQuestionsAction should have an @Name annotation.


                  It was my mistake, i forgot to paste the @Name annotation in my post, but it is present in my code. Here it is now,

                  @Stateless
                  @Scope(EVENT)
                  @Name("SecretQuestionsAction")
                  


                  can you help me now, thanx alot.

                  • 6. Re: Please Help (multiple row operations in a data table)
                    gavin.king

                    It appears that your command button that is bound to deleteSelection is *outside* the datatable with the list of selections!

                    It should be in a column of the datatable if you expect to be able to use @DataModelSelection.