【问题标题】:p:inputText in p:dataTable not setting the value in the beanp:dataTable 中的 p:inputText 未在 bean 中设置值
【发布时间】:2013-12-11 16:24:08
【问题描述】:

我正在尝试实现一个 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。如果您需要更多信息,请告诉我。
问候。

【问题讨论】:

  • 请以 SSCCE 风格发布代码。根据目前提供的信息,至少有 3 种可能的原因,我不知道是哪一种。至少,与视图相比,您的模型很可能发生了不兼容的变化。有关创建 SSCCE 的提示,请阅读 stackoverflow.com/tags/jsf/info
  • 谢谢@BalusC,我会阅读链接并编辑帖子
  • 编辑了@BalusC 的帖子,我忘了提到第一个代码是通过选项卡包含在另一个文件中的:S
  • 嗨@BalusC,很抱歉打扰你,但我仍然无法解决这个问题,你有什么建议吗?谢谢

标签: spring jsf primefaces datatable


【解决方案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>

【讨论】:

  • 非常感谢,您为我节省了很多时间
猜你喜欢
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
相关资源
最近更新 更多