【问题标题】:RichFaces ExtendedDataTable tableState error with generated ID生成 ID 的 RichFaces ExtendedDataTable tableState 错误
【发布时间】:2016-06-29 00:49:32
【问题描述】:

我正在尝试使用 RichFaces 保留表格的状态。 RichFaces 具有 tableState 的此功能,它是有关表的所有信息的 json 字符串。 tableState 字符串现在看起来像这样

{"columnsWidthState":{"j_idt433":"140px","j_idt269":"32px","j_idt379":"80px","j_idt424":"200px","j_idt415":"200px","j_idt406":"110px","j_idt375":"115px","j_idt397":"80px","j_idt388":"120px"},"columnsSortState":{"j_idt433":null,"j_idt269":null,"j_idt379":null,"j_idt424":null,"j_idt415":null,"j_idt406":null,"j_idt375":null,"j_idt397":null,"j_idt388":null},"columnsOrderState":["j_idt269","j_idt375","j_idt379","j_idt388","j_idt397","j_idt406","j_idt415","j_idt424","j_idt433"],"columnsFilterState":{"j_idt433":null,"j_idt269":null,"j_idt379":null,"j_idt424":null,"j_idt415":null,"j_idt406":null,"j_idt375":null,"j_idt397":null,"j_idt388":null}}

我很想知道这些标识符是如何生成的,即 j_idt388 等。我尝试将 id 赋予列,richfaces tableState 字符串兑现了这一点。 tableState json 现在看起来像这样

{"columnsWidthState":{"date":"140px","sessions":"110px","application":"115px","activity":"200px","kvalue":"80px","risk":"80px","account":"120px","riskFactor":"200px","status":"32px"},"columnsSortState":{"date":null,"sessions":null,"application":null,"activity":null,"kvalue":null,"risk":null,"account":null,"riskFactor":null,"status":null},"columnsOrderState":["status","application","account","kvalue","sessions","riskFactor","activity","risk","date"],"columnsFilterState":{"date":null,"sessions":null,"application":null,"activity":null,"kvalue":null,"risk":null,"account":null,"riskFactor":null,"status":null}}

我保留了这个 json 字符串,这样以后如果我登录,我应该会看到与我离开时相同的表状态。

问题是,一旦我注销并登录到我的应用程序。 RichFaces 失败并引发异常。这让我觉得它不再能够识别 json 字符串,但我想知道为什么。这是一个例外:

java.lang.NullPointerException: null
at org.richfaces.renderkit.ExtendedDataTableRenderer.encodeHeaderOrFooterCell(ExtendedDataTableRenderer.java:275) ~[richfaces-4.5.13.Final.jar:4.5.13.Final]
at org.richfaces.renderkit.ExtendedDataTableRenderer.encodeHeaderOrFooter(ExtendedDataTableRenderer.java:378) ~[richfaces-4.5.13.Final.jar:4.5.13.Final]
at org.richfaces.renderkit.ExtendedDataTableRenderer.encodeHeader(ExtendedDataTableRenderer.java:466) ~[richfaces-4.5.13.Final.jar:4.5.13.Final]
at org.richfaces.renderkit.ExtendedDataTableRenderer.doEncodeChildren(ExtendedDataTableRenderer.java:725) ~[richfaces-4.5.13.Final.jar:4.5.13.Final]

【问题讨论】:

    标签: jsf richfaces richfaces-modal


    【解决方案1】:

    JSF 为元素生成 ID,开发人员没有在元素的属性中设置自己的 ID。这会导致您在第一个代码 sn-p 中发布的 ID 以 j_id 开头(例如 j_idt433)。您可以在this answer 中阅读有关 ID 生成的更多信息。

    ID 生成取决于计算元素的数量。因此,如果您保留一个表状态并稍后尝试恢复它,并且表更改之前的元素数量,则 ID 不再正确。这可能会导致您发布的异常。

    为防止这种情况,只需给每个<rich:column /> 一个 ID。

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 2012-02-22
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多