問題タブ [viewparams]
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 - 最初の AJAX リクエストで再度呼び出される
JBoss Wildfly 8.2.0 を使用<f:viewParam>
していますが、ページで 2 回呼び出されていることに気付きました。
- 初めて、URLに指定されたパラメーターを使用してページにアクセスしたときです
- 2 回目は、そのページから作成した最初の AJAX リクエストです。
豆:
XHTML:
<f:viewParam>
AJAX リクエストが をトリガーする理由と、最初のリクエストのみをトリガーする理由がわかりません。
jsf - 使用時に動作しない
リクエスト パラメータと requestScoped Bean を使用してマスター/詳細画面を作成したいのですが、ビュー パラメータが満たされません。
リダイレクトを呼び出すリンク:
その背後にある方法:
詳細 xhtml ページ:
最後に詳細 Bean:
currentVisitId は常に 0 です。実際には見つかりません。
jsf - javax.persistence.NoResultException: クエリのエンティティが見つかりません
ユーザーが自分のレコードを表示できるグリッドがあります。レコードをクリックすると、別のページにリンクされ、編集または削除できます。
そのページのレコードは正しく表示され、変更が行われた場合にレコードを更新し、ユーザーをグリッドに戻すボタンがあります。
Netbeans 8.0.2およびwildfy 8.2で、Primefacesを使用してJava 1.8を使用しており、OSはUBUNTUです。
何かを変更しようとすると、ページは何もせず、wildfly ログにこの記録があります
15:11:16,369 エラー [org.jboss.as.ejb3] (デフォルト タスク 19) javax.ejb.EJBTransactionRolledbackException: クエリのエンティティが見つかりません 15:11:16,371 エラー [org.jboss.as.ejb3.invocation] ( default task-19) JBAS014134: メソッド public abstract dominio.Gasto persistencia.GastoDAO.getGastoporID(int) のコンポーネント GastoDAOImpl で EJB 呼び出しが失敗しました: javax.ejb.EJBTransactionRolledbackException: クエリのエンティティが見つかりません
原因: javax.persistence.NoResultException: クエリのエンティティが見つかりません
15:11:16,405 エラー [org.jboss.as.ejb3.invocation] (デフォルト タスク 19) JBAS014134: コンポーネント GastoControladorImpl で EJB 呼び出しが失敗しました メソッド public 抽象 dominio.Gasto controladores.GastoControlador.obtenerGastoporID(int): javax.ejb .EJBTransactionRolledbackException: クエリのエンティティが見つかりません
15:11:16,439 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (デフォルト タスク 19) javax.faces.component.UpdateModelException: javax.el.ELException: /editargastos.xhtml @10,64 value=" #{gastoBean.idGasto}": javax.ejb.EJBTransactionRolledbackException: クエリのエンティティが見つかりません
奇妙なことに、プログラムをデバッグ モードで実行すると、問題はまったくなく、システムは意図したとおりに動作します (データは適切に変更され、ユーザーはメイン グリッドに戻るだけです。
私のコード:
1) これは、変更されるアイテムのレコードを表示するページです。デバッグ モードまたは通常モードで正しいレコードが表示されます。
2) バッキング Bean: これは、前のページの変更項目によって呼び出される Bean です。システムがデバッグ モードで実行されている場合、すべての行が意図したとおりに機能し、完了後にデータベースが更新され、ユーザーがグリッド。
しかし...デバッグオプションなしでプログラムを実行すると、まったく機能せず、データベースの変更も、ユーザーのリダイレクトも、例外も表示されません。
更新:メッセージを表示するためだけにボタンに添付されたメソッドを変更しましたが、「通常モード」でも機能しません。実際にはPrimefacesのエラーだと思います:(
jsf - @ViewScoped @ManagedBean 使用時に破棄
Mojarra 2.2.12 を使用しています。@ViewScoped
@ManagedBean
ビューは終了していませんが、ページの読み込み時に a がすぐに破棄される場合があります。この問題は、以下の のみで再現可能です<h:body>
。
はother
、同じビューではなく、別のビューを参照する必要があります。<f:viewParam>
問題を再現する必要はありません。
そして以下の豆:
属性を削除includeViewParams="true"
すると、Bean はすぐに破棄されませincludeViewParams="true"
ん。なぜこの動作が発生するのですか?
jsf - h:link で includeViewParams="true" を指定した偽の PreDestroyViewMapEvent
2 つのビュー (a.xhtml
とb.xhtml
) があり、そのうちの 1 つは他のビューへのリンクを含んでいます。最初のビュー:
- 現在のビュー マップに値を設定して使用します。
- リンクのクエリ文字列にビュー パラメータを自動的に含めるために
b.xhtml
withh:link
using を指します。includeViewParams="true"
a.xhtml
:
とb.xhtml
:
また、ViewMapListener
一度アクセスすると発生する「偽の」ビュー マップ破壊イベント呼び出しを示すために、ここで を作成していa.xhtml
ます。私のfaces-config.xml
中で私はこのエントリを持っています:
どこTestViewMapListener
がこのようなものです:
ページa.xhtml
がレンダリングされると、リスナーは次の行を出力します。
b.xhtml
一度も訪れたことがないので奇妙です。ボタンで移動すると"Navigate away"
、正しいイベントが期待どおりに出力されます。
includeViewParams="true"
リンクで使用している場合にのみ、誤ったイベントが発生します。デバッグすることで、com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(FacesContext)
一時的にFacesContext
UIViewRoot に設定されているために発生することがわかりますb.xhtml
元のビュー マップの浅いコピーが作成され、一時的なビュー ルートに設定されます。これはおそらく、リンクのクエリ文字列パラメーターの値を正しく検出するために行われます。また、操作中はイベントを一時的にオフにしますが、オンに戻すのが早すぎます (「finally」ブロックを参照)。そのため、ビュー マップの一時的なコピーに対してビュー マップの破棄イベントが「誤って」発生しますが、イベントは発生しません。現時点では、元のビュー マップ自体が期待されています。元のマップが破壊されたのか、それとも「ゴースト」の偽のイベントなのかを検出するために、いくつかの追加のアクションを実行する必要があるため、頭痛の種です。
これはバグですか、それとも望ましい動作ですか? Mojarra 2.2.12 を使用しています。