[RESOLVIDO] ComboBox <s:selectItems>

Boas,

Estou a usar SEAM para fazer um projecto.

Tenho este xhtml:

<ui:define name="label">Error Code Itype</ui:define> <h:selectOneMenu value="#{intf.error_code_itype}" style=" width : 81px;"> <s:selectItems value="#{listaErros}" var="erro" label="#{erro.codigo} #{erro.msg_erro}" noSelectionLabel="#{intf.error_code_itype}" hideNoSelectionLabel="true"/> </h:selectOneMenu>

Na “label” a variável “erro” é do tipo “Erro”. Eu quero que me mostre os valores “erro.codigo” e erro.msg_erro" na ComboBox, e é o que está a acontecer como podem ver aqui:

A ComboBox está dentro de um formulário e eu quero que ele ao GRAVAR passe apenas o valor “erro.codigo” que é do tipo String. Neste momento ele está a passar um objecto de tipo “Erro” e não a String que eu quero. Alguém me sabe dizer como altero o código xhtml para passar o que eu quero?

Cumprimentos,

Boa tarde, guga.

pelo que entendi, vai precisar usar um converter. Algo do tipo:

 public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
          if (value == null || value.trim().length() == 0) return new Character('N');
 
          Character toReturn = (value.equalsIgnoreCase("true")) ? 'Y' : 'N';
          return toReturn;
     }
 
     public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException {
          String toReturn = "false";
 
          if (value == null) {
               return toReturn;
          }

adicione o value no seu selectItems


<s:selectItems value="#{listaErros}" var="erro" label="#{erro.codigo} #{erro.msg_erro}" value="#{erro.codigo}" noSelectionLabel="#{intf.error_code_itype}"  hideNoSelectionLabel="true"/>

so olhar no exemplo ai em cima

[quote=ninvit]Boa tarde, guga.

pelo que entendi, vai precisar usar um converter. Algo do tipo:

[code]
public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
if (value == null || value.trim().length() == 0) return new Character(‘N’);

      Character toReturn = (value.equalsIgnoreCase("true")) ? 'Y' : 'N';
      return toReturn;
 }

 public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException {
      String toReturn = "false";

      if (value == null) {
           return toReturn;
      }

[/code][/quote]

não há necessidade de criar converter ja que o valor que ele quer enviar é umas string, pois ja exitem converters implementados para tipos primitivos, os tipos objetos Integer ,Long , Double, Float, BigInteger, BigDecimal, Number etc… e tambem para os tipos Strings

[quote=DaniloAndrade]adicione o value no seu selectItems


<s:selectItems value="#{listaErros}" var="erro" label="#{erro.codigo} #{erro.msg_erro}" value="#{erro.codigo}" noSelectionLabel="#{intf.error_code_itype}"  hideNoSelectionLabel="true"/>

so olhar no exemplo ai em cima[/quote]

Não posso visto que já tenho um “value” no selectItems.

[quote=guga08][quote=DaniloAndrade]adicione o value no seu selectItems


<s:selectItems value="#{listaErros}" var="erro" label="#{erro.codigo} #{erro.msg_erro}" value="#{erro.codigo}" noSelectionLabel="#{intf.error_code_itype}"  hideNoSelectionLabel="true"/>

so olhar no exemplo ai em cima[/quote]

Não posso visto que já tenho um “value” no selectItems.[/quote]

<ui:define name="label">Error Code Itype</ui:define>  
<h:selectOneMenu  value="#{intf.error_code_itype}" style=" width : 81px;">  
    <s:selectItems value="#{listaErros}" var="erro" label="#{erro.codigo} #{erro.msg_erro}" noSelectionLabel="#{intf.error_code_itype}" hideNoSelectionLabel="true"/>  
</h:selectOneMenu>  

é mesmo, eu não tinha reparado :lol:

agora que eu vi que vc ta usando o s:selectItems

é necessario mesmo usar esse <s:selectItems>

vc não pode usar o <f:selectItems>

no lugar do value que eu falei usa o

itemValue ai vai ficar assim

<s:selectItems value="#{listaErros}" var="erro" label="#{erro.codigo} #{erro.msg_erro}" itemValue="#{erro.codigo}"  noSelectionLabel="#{intf.error_code_itype}" hideNoSelectionLabel="true"/>    

[quote=DaniloAndrade]no lugar do value que eu falei usa o

itemValue ai vai ficar assim

<s:selectItems value="#{listaErros}" var="erro" label="#{erro.codigo} #{erro.msg_erro}" itemValue="#{erro.codigo}" noSelectionLabel="#{intf.error_code_itype}" hideNoSelectionLabel="true"/> [/quote]

Funcionou :slight_smile:

Obrigado pelas respostas!

por nada,

so que esse s:selectItems é totalmente fora de padrão ele podia seguir a convenção e no lugar do value usar o items igual o f:selectItems