我在 jsf 页面中有以下代码,由 jsf 托管 bean 支持
<h:dataTable value="#{poolBean.pools}" var="item">
<h:column>
<f:facet name="header">
<h:outputLabel value="Id"/>
</f:facet>
<h:outputText value="#{item.id}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputLabel value="Start Range"/>
</f:facet>
<h:inputText value="#{item.startRange}" required="true"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="End Range"/>
</f:facet>
<h:inputText value="#{item.endRange}" required="true"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Pool type"/>
</f:facet>
<h:selectOneMenu value="#{item.poolType}" required="true">
<f:selectItems value="#{poolBean.poolTypesMenu}"/>
</h:selectOneMenu>
</h:column>
<h:column>
<f:facet name="header"/>
<h:commandButton id="ModifyPool" actionListener="#{poolBean.updatePool}" image="img/update.gif" title="Modify Pool">
<f:attribute name="pool" value="#{item}"/>
</h:commandButton>
</h:column>
</h:dataTable>
此代码片段专用于编辑项目集合。表格的每一行都包含“编辑”按钮,用于将行的更改值提交给服务器。它具有项目本身作为属性。提交是通过调用后备托管 bean 中的 actionListener 方法来执行的。
此代码在 Glassfish v 2.1 上正确运行
但是当服务器更新到 Glassfish v 2.1.1 时,该属性停止正确传递。不是传递已编辑的项目(当我们更改表格行中的值时,我们实际上是在更改底层对象字段),而是将源项目提交给服务器,即先前提供给页面的项目。在页面上所做的所有更改都将被丢弃。
我尝试将 jsf 版本从 1.2_02 更新到 1.2_14(我们使用的是 jsf RI),但没有任何效果。
也许有人遇到过同样的问题?任何帮助和建议将不胜感激。