我具有以下在JSF页面代码,由JSF管理豆备份

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

此代码段是专用于编辑的项目来收集。表的每一行包含“编辑”按钮用于提交更改行的值到服务器。它有项目本身作为一个属性。提交是通过调用的ActionListener方法在背衬托管bean进行。

此代码正确运行在Glassfish的V 2.1

但是,当服务器被更新为Glassfish的v 2.1.1,属性停止被正确地传递。相反,经过修改的项目(当我们在表行更改值,我们实际上是在不断变化的基础对象字段),源项目被提交到服务器,即先前提供给页面的项目。所有的页面上所做的更改将被丢弃。

我试图更新版本JSF从1.2_02到1.2_14(我们使用JSF RI),但它没有任何效果。

也许有人在同样的问题就来了?任何帮助和建议将不胜感激。

有帮助吗?

解决方案

Glassfish的时捆绑JSF。 Glassfish的V2.1.1附带钻嘴鱼科1.2_13 。你其实并不需要有自己的JSF库在/WEB-INF/lib。我不知道这个特殊的问题是怎么造成的,而是要开始,你需要确保你没有JSF版本的碰撞在classpath。

也就是说,通过bean属性的优选JSF 1.2的方式是使用f:setPropertyActionListener

<h:commandButton id="ModifyPool" actionListener="#{poolBean.updatePool}" image="img/update.gif" title="Modify Pool">
    <f:setPropertyActionListener target="#{poolBean.pool}" value="#{item}"/>
</h:commandButton>

<强>更新:回想东西;这个问题建议你还是有一个JSF 1.2版本在classpath中年纪比1.2_05左右。组件属性的处理有利于增强性能的改变按这个版本。概括地说,如果你有一个年纪比1.2_05在您的classpath中jsf-api.jar,虽然没有在你的classpath 1.2_05或更新一个jsf-impl.jar,您将体验正是这个问题。

解决的办法是显而易见的:清理你的classpath摆脱旧的JSF版本。通过web应用程序的默认类路径覆盖路径下的每个/WEB-INF/libAppserver/lib(这是在Appserver/domains/domainname/* Glassfish的地方的情况下)和JRE/libJRE/lib/ext。请记住,GlassFish的javaee.jar包括JSF库一样,所以你真的需要确保你没有在你的/WEB-INF/lib或者其他更为JAR(或任何其他应用程序服务器特定的JAR文件)。

scroll top