style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

primefaces editar(sol)

Hola atodos, estoy realizando un datatable editable de primefaces y me da el siguiente error al modificar un campo en la tabla:

: javax.faces.component.UpdateModelException: javax.el.PropertyNotWritableException:pagina1.xhtml @47,113 value="#{comentario.fecha}": Propiedad 'fecha' no grabable para el tipo paquete.comentario

El campo fecha es date , por lo he puesto esto en la columa fecha del datatable.

<p:column headerText="Comentario" sortBy="#{comentario.fecha}" >
                            <p:cellEditor>
                                <f:facet name="output"><h:outputText value="#{comentario.fecha}"  /></f:facet>
                                <f:facet name="input"><p:inputText value="#{comentario.fecha}" style="width:100%" >
                                <f:convertDateTime pattern="MM/dd/yyyy" />
                                    </p:inputText></f:facet>
                            </p:cellEditor>
                        </p:column>

Y sigue dando error

Espero que me podais ayudar.gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: primefaces datatable date

 

Tal vez quieras usar Calendar:

<p:cellEditor>
  <f:facet name="output"><h:outputText value="#{comentario.fecha}" /></f:facet>
  <f:facet name="input"><p:calendar value="#{comentario.fecha}" pattern="MM/dd/yyyy" /></f:facet>
</p:cellEditor>

~~~

He puesto la linea de codigo

He puesto la linea de codigo de calendar y no se muestra en el navegdor el datatable y me da el siguiente error
com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(DateFormat.java:310)
at java.text.Format.format(Format.java:157)

Setter

La excepción javax.el.PropertyNotWritableException ocurre cuando la propiedad a la que haces referencia no tiene un metodo setter para asignar el valor, en tu caso, asegurate que la propiedad o variable "fecha" tenga un método llamado setFecha. Sería bueno que colocaras en código de las clases java que estas utilizando.

editar error

Tengo puesto el metodo setFecha

public class Comentario implements Serializable {
 @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idComentario")
    private Integer idComentario;
@Column(name = "fecha")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecha;
 public Comentario() {
    }
 public Integer getIdComentario() {
        return idComentario;
    }

    public void setIdComentario(Integer idComentario) {
        this.idComentario = idComentario;
    }
 public String getFecha() {
        //return fecha;
        SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yyyy");
        return formateador.format(fecha);
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

---------------

@ManagedBean
@SessionScoped
public class EditComentarioView implements Serializable¨{

List<Comentario> comentarios;
--------------
    public void onRowEdit(RowEditEvent event) {
        Comentario comentario = (Comentario) event.getObject();
        dao.updateComentarios(comentario);
        FacesMessage msg = new FacesMessage("Comentario modificada","");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

}

Me da el siguiente error
Caused by: javax.el.PropertyNotWritableException: Propiedad 'fecha' no grabable para el tipo paquete.Comentario
        at javax.el.BeanELResolver$BeanProperty.write(BeanELResolver.java:323)
        at javax.el.BeanELResolver$BeanProperty.access$100(BeanELResolver.java:283)
        at javax.el.BeanELResolver.setValue(BeanELResolver.java:125)
        at com.sun.faces.el.DemuxCompositeELResolver._setValue(DemuxCompositeELResolver.java:255)
        at com.sun.faces.el.DemuxCompositeELResolver.setValue(DemuxCompositeELResolver.java:281)
        at org.apache.el.parser.AstValue.setValue(AstValue.java:202)
        at org.apache.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:257)
        at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131)

Re: calendar

 

Hice una pequeña prueba, y funciona perfectamente.

  1. La clase dominio:

    package org.javamexico.test;

    import java.util.Date;

    public class Comment {

        private Date date;
        private String content;

        public Comment() {
        }

        public Comment(Date date, String content) {
            this.date = date;
            this.content = content;
        }

        public Date getDate() {
            return date;
        }

        public void setDate(Date date) {
            this.date = date;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

    }

  2. El bean de JSF:

    package org.javamexico.test;

    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import javax.enterprise.inject.Model;
    import org.primefaces.event.CellEditEvent;

    @Model
    public class CommentView {

        private List<Comment> comments;

        public List<Comment> getComments() {
            if (comments == null) {
                comments = new ArrayList<>();
                comments.add(new Comment(new Date(), "First comment."));
                comments.add(new Comment(new Date(), "Second comment."));
            }
            return comments;
        }

        public void onCellEdit(CellEditEvent event) {
            Object oldValue = event.getOldValue();
            Object newValue = event.getNewValue();
            System.out.printf("Old: %s, New: %s%n", oldValue, newValue);
        }

    }

  3. La página JSF:

    <?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://xmlns.jcp.org/jsf/html"
         xmlns:f="http://xmlns.jcp.org/jsf/core"
         xmlns:p="http://primefaces.org/ui">
        <h:head>
            <title>Facelet Title</title>
        </h:head>
        <h:body style="padding: 150px">
            <h:form>
                <p:dataTable var="comment" value="#{commentView.comments}" editable="true" editMode="cell" >
                    <p:ajax event="cellEdit" listener="#{commentView.onCellEdit}" />
                    <p:column headerText="Content">
                        <p:cellEditor>
                            <f:facet name="output"><h:outputText value="#{comment.content}" /></f:facet>
                            <f:facet name="input"><p:inputText value="#{comment.content}" /></f:facet>
                        </p:cellEditor>
                    </p:column>
                    <p:column headerText="Date">
                        <p:cellEditor>
                            <f:facet name="output"><h:outputText value="#{comment.date}">
                                    <f:convertDateTime pattern="MM/dd/yyyy" />
                                </h:outputText></f:facet>
                            <f:facet name="input"><p:calendar value="#{comment.date}" pattern="MM/dd/yyyy" /></f:facet>
                        </p:cellEditor>
                    </p:column>
                </p:dataTable>
            </h:form>
        </h:body>
    </html>
  4. Una posible salida:

    img


P.D.: Use PrimeFaces 5.2 y Glassfish 4.

~~~

editar error

Hola jpaul,

Cuando realizas la pagina jsf, mas concretamente esta parte

p:column headerText="Date">
                    <p:cellEditor>
                        <f:facet name="output"><h:outputText value="#{comment.date}">
                                <f:convertDateTime pattern="MM/dd/yyyy" />
                            </h:outputText></f:facet>
                        <f:facet name="input"><p:calendar value="#{comment.date}" pattern="MM/dd/yyyy" /></f:facet>
                    </p:cellEditor>
                </p:column

¿Cuando pone usted comment.date el netbeans te lo reconoce como String o date?. A mi como string y sigo con el mismo error de ayer

Re: String o date

¿Cuando pone usted comment.date el netbeans te lo reconoce como String o date?

¿A qué te refieres?

Bueno, en NetBeans me aparece algo así:

Imgur

El “date                       Date” que aparece en el tooptip está directamente relacionado con el campo date de tipo java.util.Date en la clase Comment del ejemplo que puse:

private Date date;

public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

Para que el p:calendar funcione, éste requiere una propiedad que regrese (getter) y reciba (setter) una instancia de java.util.Date.

~~~

sol edit

Cambio en el metodo date ,en vez de poner string pongo date.(solucion)

gracias

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">