1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problema ao selecionar no RICH:SELECT

Olá, estou com o seguinte com esse componente: Eu estou pegando o items de uma lista no Bean e o componente está com o enableManualInput="true", suponhamos que essa lista tenha os itens "ab", "abc", "abcd", mas quando eu seleciono um desses, ele sempre vai me trazer o primeiro que achar na lista. Por exemplo:

Eu inseri os itens na seguinte ordem: "abc", "ab", "abcd".

Quando eu tento selecionar o "ab" no select, ele pega o primeiro que encontra, esse sendo o "abc", mas se eu selecionar o "abcd" ele vem corretamente. Isso não ocorre se eu inserir na lista na ordem "correta": "ab", "abc", "abcd".

Quando eu faço assim ele sempre seleciona o atributo certo. Se eu trocar e deixar o "abcd" primeiro não importa qual eu selecionar ele vai me trazer o "abcd". O que me leva a crer que ele procura no componente a primeiro string que ele achar com esse nome como se estivesse usando um like. Vou postar um exemplo do código:

XHTML

<rich:select id="#{cc.attrs.id}_Secretaria"  immediate="true"
      value="#{itemBean.ItemSelecionado}" 
      showButton="false"
      enableManualInput="true"
      onselectitem="#{itemBean.pesquisarEstrutura()}"
      converter="#{converter}">
         <f:selectItems id="#{cc.attrs.id}_Itens"
                        value="#{itemBean.itens}"  />
         <a4j:ajax event="selectitem" execute="@form"  immediate="true"
                   render="args argsGroup"/>
</rich:select>

BEAN

@SuppressWarnings("serial")
@Named(value = "itemBean")
@ViewAccessScoped
public class ItemBean implements Serializable {

    private List<EntityItem> itens;

    private EntityItem itemSelecionado;

    public ItemBean() {
        super();
        consultarSecretarias(null);
    }

    public List<EntityItem> consultarItens(String arg) {
        try {
            if (this.itens == null || (arg != null && !arg.isEmpty())) {
                this.itens = new ArrayList<EntityItem>(getItensBO().buscarItensAtivos(arg));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return this.itens;
    }

    public List<EntityItem> getItens() {
        return itens;
    }

    public void setItens(List<EntityItem> itens) {
        this.itens = itens;
    }

    public EntityItem getItemSelecionado() {
          returns itens;
    }

     public void setItemSelecionado(EntityItem item) {
           this.itemSelecionado = itemSelecionado;
    }

ENTITY

@Entity
@Table(name = "EntityItem")
public class EntityItem extends GenericEntityImpl {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "IdItem")
    private Long id;

    @Enumerated(EnumType.STRING)
    @Column(name = "Status")
    private EnumStatus status;

    @Column(name = "Sigla")
    private String sigla;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public EnumStatus getStatus() {
        return status;
    }

    public void setStatus(EnumStatus status) {
        this.status = status;
    }

    public String getSigla() {
        return sigla;
    }

    public void setSigla(String sigla) {
        this.sigla = sigla;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final EntityItem other = (EntityItem) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 67 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }

}

DAO

@Stateless
@Local
@SuppressWarnings("unchecked")
public class ItemDAO extends ExtendedGenericDAO<EntityItem, Serializable> {

    public List<EntityItem> buscarItensAtivos(String sigla) throws ApplicationException {

        StringBuilder jpql = new StringBuilder("SELECT ei FROM EntityItem ei");
        jpql.append(" WHERE ei.status = 'ATIVO'");
        if (sigla != null)
            jpql.append(" AND ei.sigla like :sigla");

        Query query = getEntityManager().createQuery(jpql.toString());

        if (sigla != null)
            query.setParameter("sigla", sigla);

        List<EntityItem> result = query.getResultList();

        return result;
    }
}

PS: Esse não é o código original mas deve funcionar do mesmo jeito que tal, postei ele porque acho que não devo postar o código do meu trabalho. Peço desculpas se não funcionar como deva.

Obrigado pela atenção :)

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.