我正在使用jsf / primefaces,netbeans和tomcat处理Web应用程序。 我有一个数据表,其中一些值从另一个表和一些可编辑的字段加载。我的问题是,在用户编辑了这个表后,如何提交整个表,以便将它存储在数据库的新表中?
<h:form id="form" prependId="false">
<h3>All of your Paddocks</h3>
<p:dataTable var="paddock" value="#{paddock.getfromPaddock()}" editable="true">
<p:ajax event="rowEdit" listener="#{paddock.onRowEdit}" />
<p:ajax event="rowEditCancel" listener="#{paddock.onRowCancel}" />
<p:column headerText="Id">
<h:outputText value="#{paddock.idPaddock}" />
</p:column>
<p:column headerText="Name">
<h:outputText value="#{paddock.name}" />
</p:column>
<p:column headerText="Area">
<h:outputText value="#{paddock.area}" />
</p:column>
<p:column headerText="Enter Grass Weight">
<p:cellEditor>
<f:facet name="output"><h:outputText value="0" /></f:facet>
<f:facet name="input"><p:inputText id="modelInput" value="0" style="width:100%"/></f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:32px">
<p:rowEditor />
</p:column>
</p:dataTable>
<h:commandButton value="Log" action="#{paddock.add}" />
</h:form>
答案 0 :(得分:3)
首先,有两个主要错误可能会产生不良副作用:
<h:form ... prependId="false">
永远不要使用prependId
。删除整个属性。
<p:dataTable var="paddock" value="#{paddock.getfromPaddock()}">
您应该为var
提供与托管bean不同的名称。例如。 paddockItem
。
关于具体问题,你的另一个错误就在这里:
<p:inputText id="modelInput" value="0" />
您没有将输入值绑定到模型。因此,无论如何,JSF都无法使用提交的值更新模型。
相应地修复它,例如:
<p:inputText id="modelInput" value="#{paddockItem.grass}" />
在提交方法中,它将立即出现在模型中。
你应该只确保你没有在<p:dataTable value>
的getter方法中与数据库交互,否则你将在每一轮迭代中覆盖模型,因此基本上将提交的值丢弃,直到命中提交方法之前的最后一行。数据表值value="#{paddock.getfromPaddock()}"
背后的奇怪方法名称表明您正在这样做。如果它是一个不动产,平均起动器就会使用value="#{paddock.fromPaddock}"
左右。