Skip to main content

Why this table In-Cell editor, doesnt work?



I am trying to figure out, how the primefaces in-cell editor works.





For some reason, it does not work. I just see it activating and also i can type, but the values do not change. What is missing?







<?xml version='1.0' encoding='UTF-8' ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:p="http://primefaces.org/ui"

xmlns:f="http://java.sun.com/jsf/core">



<h:form>

<p:dataTable id="allSubjects" var="subject" value="#{subjectControllerUpdate.retrieve()}" paginator="true" rows="7" >

<p:column headerText="Name" sortBy="#{subject.name}" style="width:200px" >

<p:cellEditor>

<f:facet name="output">

<h:outputText value="#{subject.name}"/>

</f:facet>

<f:facet name="input">

<p:inputText value="#{subject.name}" style="width:100%"/>

</f:facet>

</p:cellEditor>

</p:column>



<p:column sortBy="#{subject.description}" headerText="Description">

<p:cellEditor>

<f:facet name="output">

<h:outputText value="#{subject.description}"/>

</f:facet>

<f:facet name="input">

<p:inputText value="#{subject.description}" style="width:100%"/>

</f:facet>

</p:cellEditor>

</p:column>



<p:column sortBy="#{subject.credits}" headerText="Credits" style="width:50px">

<p:cellEditor>

<f:facet name="output">

<h:outputText value="#{subject.credits}"/>

</f:facet>

<f:facet name="input">

<p:inputText value="#{subject.credits}" style="width:100%"/>

</f:facet>

</p:cellEditor>

</p:column>



<p:column headerText="Options" style="width:50px">

<p:rowEditor />

</p:column>

</p:dataTable>

</h:form>



</html>







This is the managed bean







package controllers;



import crudfacades.SubjectFacade;

import entities.Subject;

import java.io.Serializable;

import java.util.List;

import javax.ejb.EJB;

import javax.enterprise.context.SessionScoped;

import javax.inject.Named;



@Named("subjectControllerUpdate")

@SessionScoped

public class SubjectControllerUpdate implements Serializable {



private List<Subject> subjects;

private Subject currentSubject;

@EJB

private SubjectFacade ejbFacade;



//INITIALIZATION

public SubjectControllerUpdate() {

currentSubject = new Subject();

}



//RETRIEVE

public List<Subject> retrieve() {

return getSubjectFacade().findAll();

}



//UPDATE



//HELP METHODS

//RETURN THE FACADE FOR DATA MANIPULATION(Best practice)

private SubjectFacade getSubjectFacade() {

return ejbFacade;

}



//GETTERS AND SETTERS

public Subject getCurrentSubject() {

return currentSubject;

}



public void setCurrentSubject(Subject currentSubject) {

this.currentSubject = currentSubject;

}



public List<Subject> getSubjects() {

return subjects;

}



public void setSubjects(List<Subject> subjects) {

this.subjects = subjects;

}

}




Comments

  1. but when i click comfirm, the value in the UI is not changed


    You've bound the value of the <p:dataTable> to retrieve() instead of getSubjects(). So every single getter call will get the values straight from the DB instead of the model.


    and i see no changes in the database


    You are not saving anything in the DB.

    Fix your controller as follows:

    @Named
    @SessionScoped
    public class SubjectControllerUpdate implements Serializable {

    private DataModel<Subject> subjects;

    @EJB
    private SubjectFacade ejbFacade;

    @PostConstruct
    public void init() {
    subjects = new ListDataModel<Subject>(ejbFacade.findAll());
    }

    public void save() {
    ejbFacade.save(subjects.getRowData());
    }

    public List<Subject> getSubjects() {
    return subjects;
    }

    }


    with

    <h:form>
    <p:dataTable value="#{subjectControllerUpdate.subjects}" ...>
            <p:ajax event="rowEdit" listener="#{subjectControllerUpdate.save}" />
    ...
    </p:dataTable>
    </h:form>


    Using DataModel<Subject> instead of List<Subject> is necessary in order to be able to get the current row.

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.