3.0M3 p:cellEditor does not work with non-primitive Java typ

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

21 Oct 2011, 00:34

3.0M3 p:cellEditor does not work with non-primitive Java type in f:selectItems.
Selecting the check mark 'v' graphic to signify done with edit has no effect.
The row stays in edit mode. Selecting the 'x' does work to cancel.

Code: Select all

       <p:column headerText="Interface" sortBy="#{user.networkInterface.id}" filterBy="#{user.networkInterface.id}" filterMatchMode="contains">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{user.networkInterface.id}" />
                </f:facet>
                <f:facet name="input">
                    <h:selectOneMenu value="#{user.networkInterface}">
                        <f:selectItems value="#{networkInterfaceService.list}"
                            var="networkInterface" 
                            itemLabel="#{networkInterface.id}"
                            itemValue="#{networkInterface}" 
                       />
                    </h:selectOneMenu>
                </f:facet>
            </p:cellEditor>
        </p:column>
///////////////////////////////////////////
// NetworkInterface.java
@Entity
public class NetworkInterface implements Serializable {
  @Id 
  private String id;
  @OneToOne
  @JoinColumn(name = "nuid")
  private NetworkUser networkUser;
  @OneToMany(mappedBy="srcInt")
  private Set<NetworkEvent> networkEventSet;
 
  public NetworkInterface() {
  }

  public NetworkInterface(String i) {
    id = i;
  }

  public String getId() {
    return id;
  }
  public void setId(String i) {
    id = i;
  }

  public NetworkUser getNetworkUser() {
    return networkUser;
  }
  public void setNetworkUser(NetworkUser nu) {
    networkUser = nu;
  }

  public Set<NetworkEvent> getNetworkEventSet() {
    return networkEventSet;
  }

  public void setNetworkEventSet(Set<NetworkEvent> nes) {
    networkEventSet = nes;
  }

  public String toString() {
    StringBuffer sb = new StringBuffer(getClass().getSimpleName() + "" + getId());
    sb.append("");
    return sb.toString();
  } 
}
//////////////////////////////////////////
// NetworkUser.java
@Entity
public class NetworkUser implements Serializable {
  @Id @GeneratedValue
  private Long id;
  private String firstName;
  private String lastName;
  @OneToOne
  @JoinColumn(name = "niid")
  private NetworkInterface networkInterface;
 
  public NetworkUser() {
  }

  public NetworkUser(String f, String l) {
    firstName = f;
    lastName = l;
  }

  public Long getId() {
    return id;
  }
  public void setId(Long i) {
    id = i;
  }

  public String getFirstName() {
    return firstName;
  }
  public void setFirstName(String s) {
    firstName = s;
  }

  public String getLastName() {
    return lastName;
  }
  public void setLastName(String s) {
    lastName = s;
  }

  public NetworkInterface getNetworkInterface() {
    return networkInterface;
  }
  public void setNetworkInterface(NetworkInterface n) {
    networkInterface = n;
  }

  public String toString() {
    StringBuffer sb = new StringBuffer(getClass().getName() + "[id=" + getId());
    sb.append(", firstName=" + getFirstName());
    sb.append(", lastName=" + getLastName());
    sb.append(", networkInterface=" + getNetworkInterface());
    sb.append("]");
    return sb.toString();
  } 
}

cagatay.civici
Prime
Posts: 18616
Joined: 05 Jan 2009, 00:21
Location: Cybertron
Contact:

21 Oct 2011, 00:47

Make sure to have a converter.

jee4hire
Posts: 9
Joined: 21 Oct 2011, 00:20

21 Oct 2011, 00:53

Using a converter does not work.
It exhibits the same incorrect behavior.

Code: Select all

        <p:column headerText="Interface" sortBy="#{user.networkInterface.id}" filterBy="#{user.networkInterface.id}" filterMatchMode="contains">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{user.networkInterface.id}" />
                </f:facet>
                <f:facet name="input">
                    <h:selectOneMenu value="#{user.networkInterface}">
                        <f:selectItems value="#{networkInterfaceService.list}"
                            var="networkInterface" 
                            itemLabel="#{networkInterface.id}"
                            itemValue="#{networkInterface}" 
                       />
                        <f:converter converterId="networkInterfaceConverter" />
                    </h:selectOneMenu>
                </f:facet>
            </p:cellEditor>
        </p:column>
////////////////////////////////////////////
@FacesConverter("networkInterfaceConverter")
public class NetworkInterfaceConverter implements Converter {
  @Inject 
  private NetworkInterfaceService service; 
  @Inject Logger log;

  @Override
  public Object getAsObject(FacesContext context, UIComponent component, String value) {
    return service.find(value);
  }

  @Override
  public String getAsString(FacesContext context, UIComponent component, Object value) {
    NetworkInterface ni = (NetworkInterface) value;
    return null != ni.getId() ? String.valueOf(ni.getId()) : null; 
  }
}

jee4hire
Posts: 9
Joined: 21 Oct 2011, 00:20

21 Oct 2011, 01:08

I also noticed that when I try to generate XML,CSV, PDF, XLS report using this p:cellEditor arrangement with

Code: Select all

   
<p:dataTable id="networkusers" var="user" value="#{networkUserService.list}" paginator="true" rows="5"
      paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">
...

<h:commandLink style="float:right">
                <p:graphicImage value="/images/pdf.png" />
                <p:dataExporter type="pdf" target="networkusers" fileName="networkusers" pageOnly="true"/>
</h:commandLink>

The following error is produced and no report is generated:

j_idt32:networkusers:0:j_idt57: Validation Error: Value is not valid
Last edited by jee4hire on 21 Oct 2011, 01:23, edited 1 time in total.

jee4hire
Posts: 9
Joined: 21 Oct 2011, 00:20

21 Oct 2011, 01:17

My env:

Mojarra 2.1.3 (SNAPSHOT 20110825)
JBoss AS 7.0.2.Final "Arc"
PrimeFaces 3.0.M3

jee4hire
Posts: 9
Joined: 21 Oct 2011, 00:20

21 Oct 2011, 01:35

I sure wish selecting the check mark 'v' graphic of the p:cellEditor would make the component
leave edit mode, and produce a rowEdit event, so I could trap it with:

<p:ajax event="rowEdit" listener="#{networkUserService.rowEditListener}"/>

jee4hire
Posts: 9
Joined: 21 Oct 2011, 00:20

25 Oct 2011, 16:36

Is it even possible to use p:dataExporter in a table that uses p:cellEditor ?

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 25 guests