繁体   English   中英

PrimeFaces 数据表中的编辑行不更新对象

[英]Edit row in PrimeFaces dataTable does not update object

使用 PrimeFaces 数据表,我尝试编辑一行。 但是当我点击“保存行”按钮时,旧值被发送到 bean。

我试图将数据库对象复制到普通的 pojo,但仍然将旧值发送到 bean。

我使用 PrimeFaces 12

XHTML:

    <h:form id="form">
      <p:growl id="msgs" showDetail="true"/>
      <div class="container-fluid">
        <h1><h:outputText value="#{txt['rider.title']}"/></h1>

        <p:dataTable id="dt_riders" class="table table-striped" value="#{riderView.allRiders}"
                     var="rider" editable="true">
          <p:ajax event="rowEdit" listener="#{riderView.onRowEdit}" update=":form:msgs"/>
          <p:ajax event="rowEditCancel" listener="#{riderView.onRowCancel}" update=":form:msgs"/>

          <p:column headerText="#{txt['rider.header.id']}">
            <h:outputText value="#{rider.id}"/>
          </p:column>
          <p:column headerText="#{txt['rider.header.name']}">
            <p:cellEditor>
              <f:facet name="output">
                <h:outputText value="#{rider.name}"/>
              </f:facet>
              <f:facet name="input">
                <p:inputText id="nameInp" value="#{rider.name}"/>
              </f:facet>
            </p:cellEditor>
          </p:column>
          <!-- and a few more -->
          <p:column>
            <p:rowEditor editTitle="Edit Row" cancelTitle="Cancel Edit" saveTitle="Save Row"/>
          </p:column>
        </p:dataTable>
      </div>
    </h:form>

豆子:

@ViewScoped
@Named("riderView")
public class RiderView implements Serializable {
    private final RiderEjb riderEjb;
    private final SecurityOfficer securityOfficer;

    public RiderView() {
        this(null, null);
    }
    @Inject
    public RiderView(RiderEjb riderEjb, SecurityOfficer securityOfficer) {
        this.riderEjb = riderEjb;
        this.securityOfficer = securityOfficer;
    }

    public List<Rider> getAllRiders() {
        return riderEjb.findAll(securityOfficer.getTeam());
    }

    public void onRowEdit(RowEditEvent<Rider> event) {
        FacesMessage msg = new FacesMessage("Rider Edited", String.valueOf(event.getObject().getName()));
        FacesContext.getCurrentInstance().addMessage(null, msg);
        riderEjb.addOrUpdate(event.getObject());
    }

    public void onRowCancel(RowEditEvent<Rider> event) {
        FacesMessage msg = new FacesMessage("Edit Cancelled", String.valueOf(event.getObject().getName()));
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
}

Java 对象(getter 和 setter 由 Lombok 生成):

@Entity
@Getter
@Setter
public class Rider extends AbstractEntity {

    @Id
    private Long id;

    private String name;
    private Double weight;
    private String gpxNames;
}

问题是方法getAllRiders() 这会调用该 bean 从数据库中收集乘客。 我将其更改为使用新的@PostConstruct init()方法从数据库中检索所有这些车手。 感谢 Jasper de Vries,我使用 primefaces-test 来查明问题所在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM