P:selectOneMenu

9 respostas
P

Olá pessoal como vai?
Estou com um probleminha nesse componente p:selectOneMenu , nesse componente eu mostro uma imagem e o nome, na hora de salvar ele da o seguinte erro:
formDialogMaintenance:categoria: Erro de validação: o valor não é válido

segue meu codigo:

<h:outputText value="Categoria" />
				<p:selectOneMenu 
					value="#{bannerBeanAdm.iconeCategoria}" 
					var="p" style="width: 310px; height: 20px" 
					disabled="#{bannerBeanAdm.home}" id="categoria">
					<f:selectItems value="#{bannerBeanAdm.listIconeCategorias}"
						var="item" itemLabel="#{item.descricao}"
						itemValue="#{item}" />
						<p:column>
							<p:graphicImage value="#{p.icone}"/>
						</p:column>
						<p:column>
							#{p.descricao}
						</p:column>
				</p:selectOneMenu>

Quando clico no botão nem cai no metodo já da a mensagem.

Fico no aguardo de alguma ajuda obrigada.

9 Respostas

A

Patricia,

provavelmente vc vai ter que criar um converter para fazer isso.

t+

P

Porque eu preciso de criar um converter?
A lista que está no f:selectItems é do mesmo tipo do que está no value do p:selectOneMenu ?
Pode me dizer como voce varia isso?
Obrigada.

R

Bom dia, precisa de um converter pois por mais que vc tenha objetos compativeis, o jsf não consegue recuperar um objeto da visualização html e sim uma string compativel, então o converter vai pegar esta string e transaforma-la no objeto de origem..

exemplo de um converter simples.

import br.com.usinaweb.util.UtilitarioConversoes;
import java.math.BigDecimal;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

/**
 *
 * @author Rogério Martins da Silva 08/10/2011
 */
@FacesConverter(value="decimalConverter")
public class MoedaConverter implements Converter{

    private UtilitarioConversoes utilitarioConversoes = new UtilitarioConversoes();
    
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        return new BigDecimal(utilitarioConversoes.formataValor(value));
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        BigDecimal valorDecimal = (BigDecimal)value;
        return utilitarioConversoes.formatoMoeda(valorDecimal.toString());
    }
    
}
A

mas por de tras dos pano, ele vai converter esse objeto em um Objeto do JSF, por isso q vc tem que converter.

segue um exemplo. http://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/

t+

P

Fiz o converte mas continua com erro. o mesmo ainda.

R

como ficou seu código?

A

posta o erro, o converter e xhtml

P
No converter está vindo o valor desse campo itemLabel="#{item.descricao}"
<h:outputText value="Categoria" />
				<p:selectOneMenu 
					value="#{bannerBeanAdm.iconeCategoria}" 
					var="p" style="width: 310px; height: 20px" 
					disabled="#{bannerBeanAdm.home}" id="categoria" converter="category">
					<f:selectItems value="#{bannerBeanAdm.listIconeCategorias}"
						var="item" itemLabel="#{item.descricao}"
						itemValue="#{item}" />
						<p:column>
							#{p.descricao}
						</p:column>
						<p:column>
							<p:graphicImage value="#{p.icone}"/>
						</p:column>
				</p:selectOneMenu>
@Override
	public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String obejtoString) {
		IconeCategoria categoria = new IconeCategoria();

		for (SmallIconURLCategory smallIconURLCategory : SmallIconURLCategory.values()) {
			if (obejtoString.equals(smallIconURLCategory.getDescricao())) {
				categoria.setDescricao(smallIconURLCategory.getDescricao());
				categoria.setIcone(smallIconURLCategory.getUrlImage());
				break;
			}
		}
		return categoria;
	}

obrigada

R

tente escrever o metodo equals do IconeCategoria

Criado 20 de outubro de 2011
Ultima resposta 11 de mai. de 2012
Respostas 9
Participantes 4