我有一个h:dataTable,其中包含从带有自定义对象Result的ArrayList生成的数据。 当我尝试启用单元格编辑时,它不允许我这样做。我怀疑它从服务器请求数据并覆盖我最后的选择。
我的<h:dataTable>
表单和完整的xhtml文档
<!-- language: xhtml -->
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>IGNORED</title>
</h:head>
<h:body>
<ui:composition template="../templates/masterLayout.xhtml">
<ui:define name="windowTitle"> #{msgs.viewResultsTitle}</ui:define>
<ui:define name="content">
<h:form>
<h:dataTable value="#{managedBean.viewResultList}" var="res"
styleClass="tracks"
headerClass="trackHeader"
columnClasses="oddColumn,evenColumn">
<h:column>
<f:facet name="header">#{msgs.trackID}</f:facet>
#{res.track_name}
</h:column>
<h:column>
<f:facet name="header">#{msgs.startnumber}</f:facet>
<h:inputText value="#{res.startnumber}" size="5" rendered="#{res.editable}" />
<h:outputText value="#{res.startnumber}" rendered="#{not res.editable}" />
</h:column>
<h:column>
<f:facet name="header">#{msgs.time}</f:facet>
<h:inputText value="#{res.time}" size="10" rendered="#{res.editable}" >
<f:validator validatorId="ResultValidator" />
<f:converter converterId="ResultConverter" />
</h:inputText>
<h:outputText value="#{res.time}" rendered="#{not res.editable}" />
</h:column>
<h:column>
<f:facet name="header">#{msgs.runnerID}</f:facet>
#{res.runner_name}
</h:column>
<h:column>
<f:facet name="header">#{msgs.divID}</f:facet>
#{res.division_value}
</h:column>
<h:column>
<h:commandLink value="#{msgs.edit}" action="#{managedBean.editAction(res)}" rendered="#{not res.editable}"/>
</h:column>
<h:column>
<h:commandLink value="#{msgs.saveChanges}" action="#{managedBean.saveAction(res)}" />
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
它调用的managedBean.editAction如下所示:
public String editAction(Result result) {
result.setEditable(true);
return null;
}
将贝斯特设置的所有结果对象设置为可编辑。但是,当我按下它时,它会加载页面,没有任何事情发生。
的啧啧答案 0 :(得分:2)
在不知道managedBean
的样子的情况下,这里有一些提示:
viewResultList()
不应更新结果列表,只能返回结果列表。否则,如果您不首先更新模型,则可能会覆盖对该列表中条目的更改(例如,如果从那里加载结果,则将其写入数据库)。result.setEditable(true);
似乎引用了列表中的一个对象,或者它甚至可能引用该列表中的 not 对象。请注意,只有该对象设置为可编辑。 setEditable(true)
那份清单
editAction()
实际上采用了对象参数order
,该参数定义orderList
中的哪个条目将设置为可编辑。答案 1 :(得分:0)
非常感谢您的帮助。
我弄明白了这个问题。这是从数据填充的位置 - &gt;一个数据库。
并且editAction(res)
将州保存到当地的arraylist。
因此,当我更新editable
时,它未保存到数据库中。