11 Replies Latest reply on Jul 18, 2011 7:25 PM by Puneet Bagoria

    Issue in Using h:selectOnemenu inside richdatatable

    Puneet Bagoria Newbie

      Hi ,

       

      We are building a web application with JSF 2.0 , rich faces 4.0

       

      We have to use h:selectOnemenu inside richdatatable . If the drop down is binded with a backing bean , on submit of form the values are not getting passed to java layer.

       

      Hard coding the value in drop down and calling java method results in correct behaviour.

       

      Any suggestions or pointers on the use of h:selectOnemenu inside richdatatable

       

      Thanks,

      Puneet

        • 2. Re: Issue in Using h:selectOnemenu inside richdatatable
          Dushyant Purohit Newbie

          Hi Nick,

           

          I am posting this on behalf of Puneet.

           

          XHTML Code :

           

          <h:form id="testDetailsForm">

                      <div id="testDetailsDiv" class="detailsDiv"

                          style="margin-top: 15px;">

                  <a4j:region>

                      <h:outputLabel id="testLabel" value="TEST"  styleClass="key"></h:outputLabel>

                  <rich:dataTable id="testDetailsDataTable" binding="#{testDetailsHandler.testDetailsDataTable}"

                  var="testInfo" style="border-top:none;border-bottom:none;">

                  <rich:column id="testType" style="width:20%; vertical-align: top;" >

                      <h:selectOneMenu id="testDetailsTypeSelectMenu" binding="#{testDetailsHandler.testDetailsTypeSelectMenu}" style="width:100%;"

                          value="#{testInfo.TEST_PURPOSE_TYPE_ID}">

                          <f:selectItem binding="#{testDetailsHandler.testDetailsTypeSelectItem}" itemLabel="--Select--" itemValue="" ></f:selectItem>

                      </h:selectOneMenu>

                  </rich:column>

                  <rich:column id="testColumn" style="width:70%;">

                      <h:inputText id="testInputText" value="#{testInfo.TEST}" style="width:98%;"></h:inputText>

                  </rich:column>

             

              </rich:dataTable>

          </a4j:region>

                      </div>

                      </h:form>

           

           

          Bean Code :

           

          import javax.faces.bean.ManagedBean;

          import javax.faces.bean.RequestScoped;

          import javax.faces.component.UISelectItem;

          import javax.faces.component.html.HtmlInputHidden;

          import javax.faces.component.html.HtmlSelectOneMenu;

           

          import org.richfaces.component.UIDataTable;

           

          @ManagedBean

          @RequestScoped

          public class TestDetails {

              private UIDataTable testDetailsDataTable;

              private HtmlSelectOneMenu testDetailsTypeSelectMenu;

              private UISelectItem testDetailsTypeSelectItem;

             

             

              public UIDataTable getTestDetailsDataTable() {

                  return testDetailsDataTable;

              }

              public void setTestDetailsDataTable(UIDataTable testDetailsDataTable) {

                  this.testDetailsDataTable = testDetailsDataTable;

              }

              public HtmlSelectOneMenu getTestDetailsTypeSelectMenu() {

                  return testDetailsTypeSelectMenu;

              }

              public void setTestDetailsTypeSelectMenu(

                      HtmlSelectOneMenu testDetailsTypeSelectMenu) {

                  this.testDetailsTypeSelectMenu = testDetailsTypeSelectMenu;

              }

              public UISelectItem getTestDetailsTypeSelectItem() {

                  return testDetailsTypeSelectItem;

              }

              public void setTestDetailsTypeSelectItem(

                      UISelectItem testDetailsTypeSelectItem) {

                  this.testDetailsTypeSelectItem = testDetailsTypeSelectItem;

              }

             

          }

           

           

          The selectOneMenu is getting populated from the java layer. But the selected value and the value entered into the input text are not going to the java layer.

          • 3. Re: Issue in Using h:selectOnemenu inside richdatatable
            Nick Belaevski Master

            How does TestInfo look like? Try adding rich:messages to the page and check if there are any,

            • 4. Re: Issue in Using h:selectOnemenu inside richdatatable
              Dushyant Purohit Newbie

              The testDetailsDataTable contains an arraylist of linked hashmaps. The var "testinfo" is mapped to a linked hashmap.

              We did not find any messages even after implementing the rich:messages in the page.

               

              The problem here is , we are able to see the rendered values in the UI for the same dataTable with the same bindings. But  we are failing while trying

              to get the values of this data table inside java layer.

              • 5. Re: Issue in Using h:selectOnemenu inside richdatatable
                Nick Belaevski Master

                Where is data table value set? What's the scope of that value?

                • 6. Re: Issue in Using h:selectOnemenu inside richdatatable
                  Dushyant Purohit Newbie

                  The value is request scoped.

                   

                  The data table value gets set in one handler.

                   

                  Below is the code:

                   

                  if(finalDetailsResult != null && finalDetailsResult.getTestDetails() != null){

                                  finalDetailsResult.getTestDetails().add(testDetailsLinkedHashMap);

                              }

                  else{

                                  testAL.add(testDetailsLinkedHashMap);

                  }

                   

                  Here finalDetailsResult.getTestDetails() is an arrayList which is populated from testDetailsLinkedHashMap. testDetailsLinkedHashMap is mapped

                  to "testinfo". "If" block serves the purpose of showing existing details but for getting new information saved "else" block comes under picture.

                  testAL is a new arrayList.

                   

                  Below is the exact code where the value of data table gets set which is followed after the code mentioned above.

                   

                  if(finalDetailsResult.getTestDetails() != null){

                              if(testDetailsHandler.getTestDetailsDataTable()==null){

                                  testDetailsHandler.setTestDetailsDataTable(StringUtil.getUIDataTable(finalDetailsResult.getTestDetails()));

                              }

                              else

                              {

                                  testDetailsHandler.getTestDetailsDataTable().setValue(StringUtil.getArrayListForUIDataTable(finalDetailsResult.getTestDetails()));

                              }

                          }

                          else{

                              if(testDetailsHandler.getTestDetailsDataTable()==null){

                                  testDetailsHandler.setTestDetailsDataTable(StringUtil.getUIDataTable(testAL));

                                 

                              }

                              else

                              {

                                  testDetailsHandler.getTestDetailsDataTable().setValue(testAL);

                                 

                              }

                          }

                  • 8. Re: Issue in Using h:selectOnemenu inside richdatatable
                    Puneet Bagoria Newbie

                    Hi Nick,

                     

                    The solution given at the link suggests using session scope beans. Is this the only solution? We would try to avoid keeping beans in session.

                     

                    Thanks for your help.

                     

                    Regards,

                    Puneet

                    • 9. Re: Issue in Using h:selectOnemenu inside richdatatable
                      Dushyant Purohit Newbie

                      Hi Nick,

                       

                      We have already tried with keeping the beans session scoped.

                       

                      When we put the beans in session scope then the data table does not get rendered at all.

                       

                      Regards,

                      Dushyant

                      • 10. Re: Issue in Using h:selectOnemenu inside richdatatable
                        Nick Belaevski Master

                        Not necessarily session scope, data table requires that data model is provided for subsequent requests only - take a look at the linked issue for details.

                        You can store query parameters and the re-fetch the data again.

                        • 11. Re: Issue in Using h:selectOnemenu inside richdatatable
                          Puneet Bagoria Newbie

                          Hi Nick,

                           

                          We are not able to solve the issue. Would you please provide some example which shows that selectonemenu works in rich data table.

                           

                          Thanks,

                          Puneet