我的primefaces应用程序中有一个数据表。前端的代码有
<!-- Start of customer datatable -->
<p:dataTable var="customer" value="#{customerBean.customers}" paginator="true" selection="#{customerBean.selectedCustomer}"
selectionMode="single" onRowSelectUpdate=":custList" onRowSelectComplete="custTab.show()" id="custList" widgetVar="custList" update=":custList">
<f:facet name="header">
List of Customers
<p:outputPanel>
<p:commandButton value="+" type="button" onclick="addCustDlg.show()"/>
</p:outputPanel>
</f:facet>
<p:column sortBy="#{customer.id}" filterBy="#{customer.id}" update=":custList">
<f:facet name="header">
<h:outputText value="ID"/>
</f:facet>
<h:outputText value="#{customer.id}"/>
</p:column>
<p:column sortBy="#{customer.name}" filterBy="#{customer.name}" headerText="NAME" filterMatchMode="contains" update=":custList">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.name}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.name}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{customer.description}" filterBy="#{customer.description}" headerText="DESCRIPTION">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.description}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.description}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{customer.signupDate}" filterBy="#{customer.signupDate}" headerText="SIGN UP DATE">
<f:facet name="output">
<h:outputText value="#{customer.signupDate}"/>
</f:facet>
</p:column>
<p:column sortBy="#{customer.validUntil}" filterBy="#{customer.validUntil}" headerText="EXPIRY DATE">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.validUntil}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.validUntil}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column sortBy="#{customer.status}" filterBy="#{customer.status}" headerText="STATUS">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{customer.status}"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{customer.status}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="CREATION DATE" sortBy="#{customer.creationDate}" filterBy="#{customer.creationDate}">
<f:facet name="output">
<h:outputText value="#{customer.creationDate}"/>
</f:facet>
</p:column>
<p:column headerText="LAST UPDATE DATE" sortBy="#{customer.lastUpdateDate}" filterBy="#{customer.lastUpdateDate}">
<f:facet name="output">
<h:outputText value="#{customer.lastUpdateDate}"/>
</f:facet>
</p:column>
<p:column headerText="Options">
<p:rowEditor/>
</p:column>
</p:dataTable>
<!-- End of dataTable (customer datatable) -->
处理rowEvent的函数在bean中指定为
public void custRowEdit(RowEditEvent event){
Customer cust = (Customer) event.getObject();
EntityManagerHelper.beginTransaction();
custDao.update(cust);
EntityManagerHelper.commit();
}
但是,在更新事件中,当我在表中编辑单元格时,我没有获得属性的新更新值。
如下图所示,当我编辑ID为1到11的条目的状态时,在函数custRowEdit中,当我尝试获取客户对象时,我仍然将客户的状态视为11和不是4。
任何人都可以帮助我理解为什么没有设置细胞的价值?
答案 0 :(得分:1)
来自Where您正在调用 custRowEdit(RowEditEvent事件)方法。我的代码中没有任何相关内容。
为了让你的监听器在你的数据表声明中调用add below属性。
rowEditListener = “#{customerBean.listenerInBackingBean}”
<p:dataTable var="customer" value="#{customerBean.customers}" paginator="true" selection="#{customerBean.selectedCustomer}"
selectionMode="single" onRowSelectUpdate=":custList" onRowSelectComplete="custTab.show()" id="custList" widgetVar="custList" update=":custList">
<f:facet name="header"
rowEditListener="#{customerBean.cutRowEvent}"
>
答案 1 :(得分:1)
检查 customerBean.customers 的实施情况。每次调用该方法时,我都会从数据库中重新加载内容。错误。这应该在构造函数中发生。现在一切正常。认为这是一个JavaScript错误...
答案 2 :(得分:1)
谢谢这帮助了我。
我可以添加,而不是从构造函数中的查询加载列表,如果有一个@SessionScoped托管bean,可以改为使用reset()方法将列表重置为null,然后从查询中懒惰地填充列表。然后可以使用f:event:
在页面加载时调用重置 <f:view>
<f:metadata>
<f:event type="preRenderView" listener="#{sessionScopedBean.reset}"/>
</f:metadata>
</f:view>
答案 3 :(得分:0)
我遇到了类似的情况,通过从dataTable中删除update =“”标记解决了这个问题。该表的默认行为是更新行,显然,在我的情况下,没有发生。
答案 4 :(得分:-1)
你错过了p:ajax事件来触发方法,功能或者你想要在细胞编辑后做的任何事情
就像
<p:ajax event="cellEdit" listener="#{mBean.onCellEdit}" update="elementX" />