問題タブ [lazydatamodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jsf - ページネーションを使用した LazyDataModel、次または最後のページをクリックしても効果がない
私はそのようなコードを持っています.10行のテーブルが表示され、ソートは完全に機能しますが、次または最後のページをクリックすると問題が発生します-何も起こりません. ページあたりの行も機能しません:( JFS Bean は @Named ではなく @ManagedBean である必要があるか、スコープが正しくない可能性がありますか?
私が使用している: netbeans 7.3.1 (glassFish 4 埋め込み) + primeFaces 3.5
customers_list.xhtml
CustomersList.java
LazyCustomerDataModel.java
jsf - Primefaces lazydatamodel ロード オーバーライドが機能しない
primefaces lazydatamodel のロードのオーバーライドに問題があります。エラーは load メソッドを指しています。私はプライムフェイス5.0を使用しています。Jboss Developer Studio 7.1 での作業
ご覧のとおり、@Override を実装していますが、それでも次のことが指摘されています。
タイプ new LazyDataModel(){} のメソッド load(int, int, String, SortOrder, Map) は、スーパータイプ メソッドをオーバーライドまたは実装する必要があります
jsf - Primefaces ページネーション (lazydatamodel) ロード メソッド
作業中のページにいくつかの問題があります。
frmConf と frmData の 2 つのセクションがあります。
最初のものには、検索目的で使用するいくつかのパラメーターがあります。
2 つ目は、Lazy として定義された DataTable を持ち、LazyDatamodel を拡張する対応するバッキングを持っています。
セクション 2 の DataTable には、DataTable で選択した行の PDF ドキュメントを作成する commandLink を持つ列があります。
私が直面している問題は、ページを初めてロードしたときに問題なく動作することです。
LazyDatamodel から load (@override) メソッドを呼び出し、DB からのクエリ結果の最初の 10 レコードを表示します。
次に、commandLink 列をクリックすると、対応する PDF の「名前を付けて保存」ダイアログが表示され、ファイルのダウンロードに進むことができます。
しかし、まだ理解していない何らかの理由で、別の行のPDF commandLinkをクリックすると、参照されたロードメソッドが呼び出され、ページネーションを行おうとしていると仮定してDBを再クエリします。必要な PDF を生成します。
私が達成しようとしているのは、選択した行の PDF ボタンをクリックするなどの無関係なイベントではなく、すべてのページネーションのケースに対してページをロードすることです。
最初の (正しい) PDF 生成後にページ コンテンツ全体を再読み込みして再クエリするのはなぜですか (ページネーションのインデックスが変更されていないのと同じ結果を示しているにもかかわらず)。私の推測では、最初の PDF 生成後に何かが発生します (ページが「リロードが必要」な状態のままになります。
ページからのマークアップと、対応するバッキング Bean PDF 生成メソッドを残します。
誰かがこれで私を助けてくれれば、本当に感謝しています。
ありがとう!
JSF マークアップ:
バッキング: (PDF方式) ...
jsf - 複数の列を行キーとして結合する複合主キーがある場合の getRowKey() および getRowData() メソッドのオーバーライド/実装
MySQL データベースにテーブルがあります。残念ながら、GlassFish Server での JAAS 認証/承認に必要な複合主キーがあります。
テーブルには、次の形式のデータが含まれています。
が に設定されている場合、 は正常に動作<p:dataTable>
します。rowKey
lazy
false
GroupTablePK
@Embeddable
クラス(JPA)です。このクラスの詳細は必要ないと思います。
lazy
ただし、 で が有効になっている場合は<p:dataTable>
、getRowKey()
およびgetRowData()
メソッドを実装する必要があります。
行キー (一意の行識別子) として列の組み合わせを必要とする複合主キーがある場合、これを行うにはどうすればよいでしょうか?
上記の実装は不完全なままです。
<p:dataTable>
これらの実装で行が選択されると、メソッドsout
内のステートメントgetRowData()
は次のように表示します。
このgetRowKey()
メソッドは のインスタンスを返しますが、GroupTablePK
このメソッドgetRowData()
は文字列型のパラメーターしか受け入れません。これは、複合主キー (ここでは ) を表すオブジェクトではないGroupTablePK
ため、適切なオブジェクト型 ( GroupTablePK
) に型変換できます。これに基づいてGroupTable
、指定された から のインスタンスを取得し、そのインスタンスを返すメソッドをList<GroupTable>
取得できます。 .getRowData()
GroupTable
さらに進めるには?
質問は純粋に直前の質問に基づいています:
編集:
に加えてhashcode()
と の実装equals()
があります。のメソッドは返されますが、 a の行が選択されたときにメソッドが 2 回呼び出されます。後続の 2 つの呼び出しでの文字列表現を 2 つの部分で返します。最初の呼び出しでは が返され、2 回目の呼び出しでは が返されます。toString()
GroupTablePK
toString()
GroupTablePK
return "entity.GroupTablePK[ userGroupId=" + userGroupId + ", groupId=" + groupId + " ]";
getRowData()
<p:dataTable>
GroupTablePK
entity.GroupTablePK[ userGroupId=aaa
groupId=ROLE_USER ]
entity.GroupTablePK[ userGroupId=aaa, groupId=ROLE_USER ]
代わりに、1 回の呼び出しで一度に返す必要があります。
したがって、この種の比較groupTable.getGroupTablePK().toString().equals(rowKey)
は不可能であり、この投稿の前に考えていました。そのような、
編集2:
以下は、JPA ノイズを除去して問題を再現する最短の例です。
代わりに試みた、
- プライムフェイス 3.5
- プライムフェイス 4.0
- プライムフェイス 5.0
- プライムフェイス5.1
- プライムフェイス5.2
PrimeFaces のこれらすべてのバージョンで、動作は一定のままです。
マネージド Bean:
データ テーブル:
行を編集しようとすると、onRowEdit()
メソッドが呼び出されます。はgetRowData()
2 回呼び出され、前述のように、後続の 2 つの呼び出しで行キーの分割を生成します。
これらは 2 つのドメイン クラスGroupTable
とGroupTablePK
.
jsf - LazyDataModel を使用して ap:dataGrid によってラップされた ap:carousel 内のコマンド コンポーネントBean がリクエスト スコープの場合、アクション (リスナー) を呼び出さない
例 :
マネージド Bean :
豆は で飾られてい@RequestScoped
ます。が作成および格納されるDataStore
アプリケーション スコープの Beanです。List<Category>
指定されたコマンド リンクは、マネージド Bean でアクション リスナー メソッド ( ) をトリガーしません。action()
ただし、Bean が装飾されている@ViewScoped
(または幅が広い) か、遅延データ モデルが削除されている場合を除きます。
このように、変化して、
に
つまり、<p:commandLink>
指定されたアクション リスナーが呼び出されます (遅延データ モデルはここでは除外されます。指定されたものは、バッキング Bean から<p:dataGrid>
直接入力されます)。List<Category>
もう 1 つの方法は、前述のビュー スコープ Bean のような、より広いスコープ Bean を使用することです。
コンポーネント内のコマンドコンポーネントが機能するように、特定の状況で遅延データモデルとともにリクエストスコープの Bean を使用することは可能ですか? <p:commandLink>
s が a<p:carousel>
によってラップされているという理由だけで、そのようなビュースコープの Bean がたくさんあり<p:dataGrid>
ます。
リストが維持されるアプリケーション スコープの Bean とドメイン モデル クラスが必要な場合。
アプリケーション スコープの Bean :
ドメインクラスCategory
:
ドメインクラスSubCategory
:
jsf - 管理対象 Bean で繰り返されるページ境界 (p:dataTable の) をリセットするボイラープレート コードの一部を回避する
のような反復コンポーネントから行を削除する際、最後のページの<p:dataTable>
すべての行が削除されている場合、現在のページを直前のページにリセットする必要があります。残念ながら、これはwithでは自動化されていません。<p:dataTable>
LazyDataModel<T>
言語的には、データ テーブルに 1 ページあたり 10 行の 11 ページが含まれており、11 ページ目のすべての行、つまり最後の行が削除されている場合、10 ページ目 (つまり、直前のページ) が自動的に取得されるはずですが、これは自動的には行われません。関連するバッキング Bean のどこかに明示的にコーディングされていない限り、(データ テーブル自体が空になるかのように、現在のページは固定 (11 番目) のままです)。
非形式的には、対応する擬似コード セグメントは次のようになります。
はページオフセットfirst
( で始まる0
) で、pageSize
ページあたりrowCount
の行数を示し、関連するデータ ストア/データベースからの行の総数を示します。
特に :
静的ユーティリティ メソッドUtility#currentPage()
は次のように定義されます。
<p:dataTable>
これはボイラープレート コードの一部であり、あらゆる場所 ( withを使用するすべてのマネージド Bean) で繰り返されることを避ける必要がありますLazyDataModel<T>
。
このプロセスを自動化する方法はありますか?
sorting - 特定の列の LazyDataModel の並べ替えをカスタマイズする
LazyDataModel
の特定の列の並べ替えをカスタマイズするにはどうすればよいp:dataTable
ですか?
primefaces - Primefaces Paginate Lazy DataTable カウント行なし
私のページには次のものがあります:
私の豆で:
私の質問は、結果 (サイズ + 1) から RowCount を設定する方法です。DB を要求せずに rowCount を計算できると確信しているため、DB からカウントを取得したくありません。