1 Reply Latest reply on May 20, 2008 11:45 AM by Stephen Friedrich

    Retrieving value from selectManyCheckbox

    Shervin Asgari Master

      I am quite new to Seam, and I have tried googling for this, but found only JSF related stuff.


      I have another post on this, but since this is a new problem I guess I can post it here.


      I am trying to retrieve the values the users chooses from a selectManyCheckbox. The problem is that the List always has the same elements inside. Even if I uncheck all the boxes and submit the form it still is the same list with all the elements.


      Hope to get some clarification.


      This is my xhtml code:



      <h:form id="searchCriteria" styleClass="edit">
      
                          <s:decorate template="../layout/display.xhtml">
                               <label>Søk på Person</label>
                               <h:inputText id="searchStringPerson" value="#{searchRegisterManager.searchStringPerson}" />
                               <br/>
                               <label>Søk på Kommune</label>
                               <h:inputText id="searchStringKommune" value="#{searchRegisterManager.searchStringKommune}" />
                               <br/>
                               <br/>
                               <label>Inneholder prøvetyper:</label>
                               <h:selectManyCheckbox value="#{provetypeSokSelectedList}" border="1">
                                    <s:selectItems value="#{proevetypeSokList}" var="proevetype" label="#{proevetype.beskrivelse}"/>
                               </h:selectManyCheckbox>
                               
                             <br/>
                               <h:commandButton id="findProever" value="Finn Prøver" action="#{searchRegisterManager.find}"/>
                          </s:decorate>
                     </h:form>




      This is my Action class:



      @Stateful
      @Name("searchRegisterManager")
      @Scope(ScopeType.SESSION)
      //@Restrict("#{identity.loggedIn}")
      public class SearchRegisterManagerAction implements SearchRegisterManager, Serializable {
      
           private static final long serialVersionUID = 7218402377558637175L;
      
           @PersistenceContext(type = EXTENDED)
           private EntityManager em;
      
           private String searchStringPerson;
      
           private String searchStringKommune;
      
           @SuppressWarnings("unused")
           @DataModel
           private List<Proeve> proeveSokList;
      
           @SuppressWarnings("unused")
           @Out(required=false)
           private List<Proevetype> proevetypeSokList;
           
           @SuppressWarnings("unused")
           @Out(required=false)
           //@In(required=false)
           private List<Proevetype> provetypeSokSelectedList;
      
           @Logger
           private Log log;
      
           @SuppressWarnings("unchecked")
           private void findProever() {
                proeveSokList = em.createQuery(
                          "from " + Proeve.class.getName() + " p "
                                    + "where (lower(p.person.fornavn) like #{patternPerson} OR lower(p.person.etternavn) like #{patternPerson} "
                                    + "OR lower(p.person.personnummer) like #{patternPerson})"
                                    + "AND (lower(p.kommune.navn) like #{patternKommune} OR lower(p.kommune.kommunenummer) like #{patternKommune}) "
                                    + "order by p.person.etternavn").getResultList();
           }
           
           @Factory(value= "proevetypeSokList")
           @SuppressWarnings("unchecked")
           public void findProevetyper() {
                proevetypeSokList = em.createQuery("from " + Proevetype.class.getName() + " pt ").getResultList();
           }
           
           @Factory(value= "provetypeSokSelectedList")
           @SuppressWarnings("unchecked")
           public void findProevetypeSokSelected() {
                provetypeSokSelectedList = em.createQuery("from " + Proevetype.class.getName() + " pt ").getResultList();
           }
      
           /**
            * Creates a factory name patternPerson so you can call it with the \#{name}
            * in the query. It will return '%' if it is null and and put '%' in the
            * beginning and last of the textfield and also replace '*' with '%'
            */
           @Factory(value = "patternPerson", scope = ScopeType.EVENT)
           public String getSearchPatternPerson() {
                return searchStringPerson == null ? "%" : '%' + searchStringPerson.toLowerCase().replace('*', '%') + '%';
           }
      
           /**
            * Creates a factory name patternKommune so you can call it with the
            * \#{name} in the query. It will return '%' if it is null and and put '%'
            * in the beginning and last of the textfield and also replace '*' with '%'
            */
           @Factory(value = "patternKommune", scope = ScopeType.EVENT)
           public String getSearchPatternKommune() {
                return searchStringKommune == null ? "%" : '%' + searchStringKommune.toLowerCase().replace('*', '%') + '%';
           }
      
           public String getSearchStringPerson() {
                return searchStringPerson;
           }
      
           public void setSearchStringPerson(String searchStringPerson) {
                this.searchStringPerson = searchStringPerson;
           }
      
           public String getSearchStringKommune() {
                return searchStringKommune;
           }
      
           public void setSearchStringKommune(String searchStringKommune) {
                this.searchStringKommune = searchStringKommune;
           }
      
           @Override
           public void find() {
                for (Proevetype pt : provetypeSokSelectedList) {
                     log.info("prøvetype: " + pt.getBeskrivelse());
                }
                findProever();
           }
      
           @Destroy
           @Remove
           public void destroy() {
           }
      }
      


        • 1. Re: Retrieving value from selectManyCheckbox
          Stephen Friedrich Novice

          Well, that's because this is purely JSF related.
          I don't want to be rude, but really: Get a good introduction to JSF (e.g. Core JavaServer Faces, Geary, Hoorstman) and also read the Seam Reference and try the examples.


          You value binding in the select many component (the value attribute of your selectManyCheckbox tag) needs to be bound to a property of your backing bean (read a getter and setter with list argument to work correctly).