2016-06-29 5 views
1

RichFacesを使用してテーブルの状態を保存しようとしています。 RichFacesには、テーブルに関するすべての情報のjson文字列であるtableStateのこの機能があります。 tableState文字列は、今の私は、カラムとのことを光栄RichFacesのtableState文字列にIDを与えてみました。この識別子が生成されている方法、すなわちj_idt388などを知るための骨董品だこのRichFaces ExtendedDataTable tableStateエラー(生成されたID)

{"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}} 

のように見えます。 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] 

答えて

0

JSFは、開発者が要素の属性に独自のIDを設定していない要素のIDを生成します。これにより、最初のコードスニペットに投稿したIDがj_id(例:j_idt433)になります。 ID生成の詳細についてはthis answerで読むことができます。

ID生成は要素の数を数えることによって異なります。したがって、テーブルの状態を保持して後でそれを復元しようとすると、テーブルの変更前の要素の数が変わった場合、IDはもう正しくありません。これにより、投稿した例外が発生することがあります。

これを防ぐには、すべて<rich:column />にIDを付けます。

関連する問題