5 Replies Latest reply on Oct 8, 2008 8:13 PM by Ken Stoneman

    a problem with SelectOneMenu

    Chuanbao Lu Newbie


      I have a SelectOneMenu on my page. Everything is fine, except the default selected value of the menu is not the value in the database when I load the page. It is always null (Not Selected). Anybody can tell me why?


      <h:selectOneMenu id="service1" value="#{personHome.instance.serviceAssistant1}">
           <s:selectItems value="#{codeTableManager.codeServiceAssistants}" var="sa"
           label="#{sa.fullName}" noSelectionLabel="Not Selected"/>
           <s:convertEntity />
           <a:support reRender="service1Email" event="onchange"/>

      public class CodeTableManager {
           private EntityManager entityManager;
           CustomIdentity identity;
           public List<CodeMarketingOffice> getCodeMarketingOffices() {
                return entityManager.createQuery("select office from CodeMarketingOffice office").getResultList();
           public List<CodeMarketingRep> getCodeMarketingReps() {
                return entityManager.createQuery("select mr from CodeMarketingRep mr").getResultList();
           public List<CodeMarketingRep> getCodeServiceAssistants() {
                return entityManager.createQuery("select sa from CodeServiceAssistant sa").getResultList();

      @Table(name="PERSON", uniqueConstraints=
      public class Person {
           public enum Status {ACTIVE, INACTIVE, NOT_IN_LDAP}
           private Long id;
           @Column(name="FIRST_NAME_TXT", length=40)
           private String firstName;
           @Column(name="LAST_NAME_TXT", length=40)
           private String lastName;
           @Column(name="PRIMARY_PHONE_TXT", length=40)
           private String primaryPhone;
           @Column(name="SECONDARY_PHONE_TXT", length=40)
           private String secondaryPhone;
           @Column(name="WORK_EXTENSION_TXT", length=5)
           private String workExtension;
           @Column(name="USERID_TXT", length=10, unique=true)
           private String userId;
           @Column(name="EMAIL_ADDRESS_TXT", length=100)
           private String emailAddress;
           @Column(name="STATUS_CODE", length=10)
           private Status status = Status.ACTIVE;
           private Date lastLDAPSynch;
           @Column(name="EMAIL_REMINDER_IND", nullable=false)
           private boolean acceptEmail = true;
           @Column(name = "PRODUCER_NAME", length = 40)
           private String producerName;
           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "MARKETING_REP_ID")
           private CodeMarketingRep marketingRep;
           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "SERVICE_ASSISTANT_ID1")
           private CodeServiceAssistant serviceAssistant1;
           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "SERVICE_ASSISTANT_ID2")
           private CodeServiceAssistant serviceAssistant2;
           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "OFFICE_ID")
           private CodeMarketingOffice marketingOffice;
           private Long version;
           public Long getId() {
                return id;
              getters and setters ......

        • 1. Re: a problem with SelectOneMenu
          Chuanbao Lu Newbie

          Finally, I figured out by myself. The answer is we can't use customized equals() method. Can the development team tell us why?

          public class CodeMarketingOffice {
               private Long id;
               @Column(name="OFFICE_NAME", length=50, nullable=false)
               private String officeName;
                  Getters and setters ...
               public int hashCode() {
                    final int prime = 31;
                    int result = 1;
                    result = prime * result + ((id == null) ? 0 : id.hashCode());
                    return result;
          //     @Override
          //     public boolean equals(Object obj) {
          //          if (this == obj)
          //               return true;
          //          if (obj == null)
          //               return false;
          //          if (!(obj instanceof CodeMarketingOffice))
          //               return false;
          //          final CodeMarketingOffice other = (CodeMarketingOffice) obj;
          //          if (id == null) {
          //               if (other.id != null)
          //                    return false;
          //          } else if (!id.equals(other.id))
          //               return false;
          //          return true;
          //     }

          • 2. Re: a problem with SelectOneMenu
            Samuel Mendenhall Apprentice

            because the id is not known if the entity is not persisted/attached

            • 3. Re: a problem with SelectOneMenu
              Chuanbao Lu Newbie

              It might be caused by Hibernate proxy.  I have an experience when I debug an application and couldn't read the property values of a hibernate entity. I have to call the getter method to see the value.

              In the above equals method, it will fix the problem if I changed to use


              other than

              The correct code should be

                  if (id == null) {
                      if (other.id != null)
                          return false;
                   } else if (!id.equals(other.id))
                      return false;

              • 4. Re: a problem with SelectOneMenu
                Chuanbao Lu Newbie

                Sorry, the correct code should be

                    if (id == null) {
                        if (other.getId() != null)
                            return false;
                     } else if (!id.equals(other.getId()))
                        return false;

                • 5. Re: a problem with SelectOneMenu
                  Ken Stoneman Newbie
                  This is not the same subject, but I am also stuck on a drop down menu. I am trying to populate a drop down with data from a database table.

                  When I use this:

                  <h:selectOneMenu id="rolename" styleClass="text" value="#{rbacRolesList.rbacRoles.rolename}">
                  <s:selectItems value="#{roleNameList.resultList}" var="roleName" label="#{roleName.description}"noSelectionLabel="None"/>

                  I get just the "None" in the drop down box.  Almost like the query is returning no results?  I found somewhere that I have to override the toString() method on my item or my values will all be memory pointers (the default toString in the base object class).  Problem is I am not sure where and how to make that change.

                  Any ideas? Or could you point me in the right direction?