selectOneMenu with entity value produces validation error in

UI Components for JSF
Post Reply
jee4hire
Posts: 9
Joined: 21 Oct 2011, 00:20

07 Nov 2011, 17:55

selectOneMenu with entity value produces validation error in p:column in p:dataTable

The following example produces a validation error when it is used in p:column in p:dataTable:

Code: Select all

http://www.primefaces.org/showcase-labs/ui/selectOneMenu.jsf

        <p:selectOneMenu value="#{autoCompleteBean.selectedPlayer1}" effect="fade" converter="player">  
            <f:selectItem itemLabel="Select One" itemValue="" />  
            <f:selectItems value="#{autoCompleteBean.players}" var="player" itemLabel="#{player.name}" itemValue="#{player}"/>  
        </p:selectOneMenu>  
Is there a scoping issue?
Is there a way to use p:ajax to bypass validation?

I am using:

Code: Select all

// My dataTable that extends  org.primefaces.model.LazyDataModel
import javax.inject.Named;
import javax.enterprise.context.SessionScope;
@SessionScoped
@Named
public class NetworkUserLazy extends LazyModel<NetworkUser> implements Serializable { ... }

// The is my player objject
@Entity
public class NetworkInterface implements Serializable {
  ...
  @Override
  public boolean equals(Object object) {
    if (object == this) {
      return true;
    }
    if (!(object instanceof NetworkInterface)) { 
      return false;
    }
    NetworkInterface other = (NetworkInterface) object;
    if (this.id == other.id) {
      return true;
    } 
    return false;
  }
}

// My player converter
import javax.enterprise.context.RequestScoped;
@RequestScoped
@FacesConverter("networkInterfaceConverter")
public class NetworkInterfaceConverter implements Converter, Serializable {
  @Inject 
  private NetworkInterfaceService service; 
  @Inject Logger log;

  @Override
  public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if (null == value || "".equals(value)) {
      return null;  
    }
    Object o = service.find(value);
    return o; 
  }

  @Override
  public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (null == value || "".equals(value)) {
      return null;  
    }
    // Convert the Foo object to its unique String representation.
    NetworkInterface ni = (NetworkInterface) value;
    return String.valueOf(ni.getId());
  }
}

robsonperassoli
Posts: 5
Joined: 25 Oct 2011, 15:49

24 Feb 2012, 19:10

Hello.

I'm having the same trouble.

My code is almost the same.

Code: Select all

<h:outputLabel value="Tipo de Venda" for="tipoVenda" />
<p:selectOneMenu value="#{pedidoDeVendaMB.pedidoDeVenda.tipoDeVenda}" id="tipoVenda" converter="tipoDeVendaConverter">
    <f:selectItems value="#{tipoDeVendaMB.list}" var="tipoVenda" itemLabel="#{tipoVenda.nome}" itemValue="#{tipoVenda.codigo}" />
</p:selectOneMenu>

Code: Select all

@FacesConverter(value="tipoDeVendaConverter", forClass=TipoDeVenda.class)
public class TipoDeVendaConverter implements Converter {
    
    @Override
    public Object getAsObject(FacesContext fc, UIComponent uic, String key) {
        if(key == null)
            return null;

        TipoDeVendaBC tipoDeVendaBC = Beans.getReference(TipoDeVendaBC.class);
        
        Long id = new Long(key);
        TipoDeVenda tipoDeVenda = tipoDeVendaBC.load(id);
        
        return tipoDeVenda;
    }

    @Override
    public String getAsString(FacesContext fc, UIComponent uic, Object o) {
        return o.toString();
    }
}
I dont know what i'm doing wrong.

My primefaces version id 3.0.1.

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 51 guests