guga08
Janeiro 23, 2013, 2:14pm
#1
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,
ninvit
Janeiro 23, 2013, 3:48pm
#2
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
guga08
Janeiro 23, 2013, 3:56pm
#5
[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"/>
guga08
Janeiro 23, 2013, 4:56pm
#9
[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
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