p:p中的inputText:dataTable没有设置bean中的值

时间:2013-12-11 16:24:09

标签: spring jsf primefaces datatable

我正在尝试实现一个dataTable,其中包含(其中包含)带有textInput的列,因此我可以修改bean中的字符串值。我的问题是bean没有正确更新,所以这是我的代码的一部分:

    <p:scrollPanel style="height:625px" mode="native">

    <p:dataTable value="#{oaBean.documentos}" var="documento"
        rowIndexVar="rowIndexVar" rowKeyVar="documentoKey" id="documentoList"
        widgetVar="myTableWidget" paginator="true" rows="50"
        emptyMessage="#{messages['norecords']}">

        <f:facet name="header">
            <h:outputText value="#{messages['documents']}" />
        </f:facet>
        <p:column style="width:1px;margin:0;padding:0;" headerText="#">
            <h:outputText value="#{rowIndexVar+1}"
                style="font-size:0.75em;margin:0;padding:0;" />
        </p:column>
        //lots of another columns
        <p:column headerText="#{messages['documento.orden']}"
              style="width:25px; text-align: center" id="columnOrden" widgetVar="columnOrden">
              <p:inputText id="ordenDocumento" value="#{documento.orden}"
              disabled="#{documento.eliminado}" style="font-size:0.9em" size="2"
              validator="floatValidator">
              </p:inputText>
        </p:column>
    </p:dataTable>
</p:scrollPanel>

问题是,当控件返回bean时,orden的值不会更新,我总是有旧的值。我也尝试为change事件添加ajax监听器,它似乎工作正常,但如果我改变例如5行,其中至少有一行保持旧值,所以我的问题是:是dataTables和textInputs有任何已知问题吗?我的代码有问题吗?

任何帮助都会非常感激,谢谢你们。
更新
对不起,我忘了提供一些信息。首先,我正在使用Mojarra 2.1.5,PrimeFaces 3.4.2和Facelets并在Tomcat 7中运行。其次,可能最重要的是,上面提供的代码通过选项卡包含在更大的xhtml中:

<ui:define name="body">
    <rich:panel styleClass="createFormPanel">
    <h:panelGroup layout="block" style="margin:0 auto;width:100%;" id="principalPanel">
    <div style="height: 665px"><p:tabView id="tabs" widgetVar="tabsView" activeIndex="#{oaBean.activeTab}">
        <p:tab id="tab5" title="#{messages['oa.tab.contenido']}">
            <h:form id="formTab2">  
            <ui:include src="/pages/oa/tabContenido.xhtml" />
            </h:form>
        </p:tab>
    </p:tabView></div>
    </h:panelGroup>
    </rich:panel>
</ui:define>


在这种情况下,tabContenido.xhtml是包含数据表定义的页面。没有包含java代码,因为它只是一个带有getter和setter值的bean。如果您需要更多信息,请告诉我 问候。

1 个答案:

答案 0 :(得分:1)

尝试将ajax事件添加到列并更新孔表,如下所示:

            <p:column headerText="#{messages['documento.orden']}"
            style="width:25px; text-align: center" id="columnOrden">
            <p:inputText id="ordenDocumento" value="#{documento.orden}"
                disabled="#{documento.eliminado}" style="font-size:0.9em" size="2"
                validator="floatValidator">
                <p:ajax event="change" update="documentoList" />
            </p:inputText>
        </p:column>