gpt4 book ai didi

java - 为什么这个表格内嵌编辑器不起作用?

转载 作者:行者123 更新时间:2023-11-30 09:40:54 26 4
gpt4 key购买 nike

我想弄清楚 primefaces 单元格编辑器是如何工作的。

由于某种原因,它不起作用。我只是看到它在激活,我也可以输入,但值没有改变。缺少什么?

<?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>

这是托管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;
}
}

最佳答案

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

您已经绑定(bind)了 <p:dataTable> 的值至 retrieve()而不是 getSubjects() .因此,每个 getter 调用都将直接从数据库而不是模型中获取值。

and i see no changes in the database

您没有在数据库中保存任何内容。

按如下方式修复您的 Controller :

@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;
}

}

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

使用 DataModel<Subject>而不是 List<Subject>是获取当前行所必需的。

关于java - 为什么这个表格内嵌编辑器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9231205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com