問題タブ [codi]
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-2 - Apache MyFaces CODI PageBean: "引数 Bean は null であってはなりません"
現在、Apache MyFaces CODI を少し試しています。@Page とクラスを返すアクション メソッドを使用して、簡単に機能する Typesafe-Navigation を作成することができました。
ただし、たとえば MyPageBean.class を使用して @PageBean-Annotation を追加すると、ページに移動しようとすると次の例外がスローされます。
私のページのコードは次のとおりです。
そして私のページビーン:
そして、Facelets ページによって呼び出される Action-Method:
pageBean-Class (MyPageBean) には特定の注釈またはインターフェースが必要ですか? すでに @Model を使用してみましたが、何も変わりませんでした。
私の構成:
- Weld を使用した Jave EE6 (weld-archetype を使用して作成)
- Glassfish 3.1 Community Edition (Netbeans 7 に同梱されているもの)
- JSF2.0 (モハラ 2.1)
- EJB 3.1
- MyFaces CODI 0.9.4
- RichFaces 4.0.0.Final
アドバイスをありがとう!
よろしく、ロバート
java - JSF: MyFaces CODI タイプセーフ ナビゲーションと f:viewParam
MyFaces CODI のすばらしい機能を試しています。タイプセーフなナビゲーションは非常に便利です。次のように、コントローラ Bean でアクション メソッドの結果を指定できます。
すべての開発 IDE の過剰なリファクタリング機能を考えると、これは本当に素晴らしいことです。
しかし、この機能を使用したい場合、viewParameter を次のビューに渡すときに問題が発生します。このアクション メソッドを呼び出すには、次のようにコマンド ボタンを使用する必要があります。
このコマンドボタンを使用すると、パラメーターを渡すことができません。「通常の」ボタンまたはリンクがそれを行います:
欠点は、「通常の」ボタンがアクション メソッドを使用しないため、CODI のタイプセーフ ナビゲーションの利点に参加できないことです。
では、これら 2 つの機能を組み合わせる可能性はありますか? (viewparams を渡し、typesafe ナビゲーションを使用する)
前もって感謝します!
jsf-2 - CODIカンバセーションを使用するにはどうすればよいですか?具体的には、どうやって終わらせるの?
こことここに投稿されたアドバイスに基づいて、 MyFacesCODIを調べてアプリケーションとともにインストールしました。私の最大の懸念は、Weldによる@ConversationScoped機能の実装の欠点を克服することでした。いくつかの問題が発生した後、GlassFish 3.1開発プラットフォームで実行し、すべてのBeanを使用するように変換しました。
結局、私は以前よりもずっと先に進んでいないようです。これ以上conversation.begin()メソッドを呼び出す必要はありません。これは良いことですが、ブラウザーがページを離れて戻ってきた後、Beanはぶらぶらします。
私が望んでいたのは、CDIで動作するJSF2.0@ViewScopedの機能でした。ユーザーがページを離れたら、ユーザーが戻ってきた場合は、バッキングBeanを破棄して、再作成する必要があります。CODIでこれを行う方法はありますか?
ちなみに、ドキュメントには、@ ViewScopedアノテーションを取得し、それらを適切に処理すると記載されています。私はこれを試してみましたが、Weldはそれをデプロイしませんでした。
PS私はmyfaces-extcdi-dist-jsf20バージョン0.9.5を使用しています。コアとJSF2オプションモジュールakibeをインストールしようとしましたが、GlassFish/Weldプラットフォームにデプロイされませんでした。ここでのアドバイスは大歓迎です。
更新1:CODIでサポートされているViewAccessScopeアノテーションを試してみましたが、それで望みどおりの結果が得られたようです。
フォローアップの質問。Apacheが維持するmavenリポジトリが維持する最新のバンドルは0.9.5です-誰かが最新バージョンをフェッチするpom.xmlセグメントを投稿できますか?
jsf-2 - MyFaces CODI を使用すると、異なるブラウザー タブで異なる windowid 値を取得できません。なぜですか?
ViewAccessScoped で CDI アノテーションを使用できるため、MyFaces CODI を使用しています。問題は、アプリケーションによって開かれた複数のブラウザー タブが@ViewAccessScopedバッキング Bean の同じインスタンスを共有していることに気付きました。気まずい。望ましくない。
私のページには、次のようなものがあります。
(これは、Primefaces p:dataGridコンポーネントによって実行される反復で実際に行われますが、ここでは単純化しようとしています。)
いずれかのリンクをクリックすると、ブラウザが新しいウィンドウ (タブ) を開き、開いた JSF Web ページは@ViewAccessScopedバッキング Bean を参照します。ただし、それらはすべて同じ windowid を取得します。これは、リンクが含まれるメイン ウィンドウと同じです。それが、すべてがバッキング Bean の同じインスタンスを取得する理由だと思います。
誰でもこれを修正する方法を知っていますか?
jsf - Myfaces CODI、@Inject、およびメモリ使用量
JSF アプリケーションで Myfaces CODI @ViewAccessScoped バッキング Bean を使用しています。利点の 1 つは、ビュー間で情報をやり取りするためにビュー パラメーターを使用する必要がないことです。レコード @ViewAccessScoped は、新しいビューの最初のリクエストがアクセスしなくなるまで、Bean がアクセス可能であることを保証します。page1 から page2 に文字列値を渡したい場合を考えてみましょう。
Page1Bean.java (page1.xhtml のバッキング Bean)
Page2Bean.java (page2.xhtml のバッキング Bean)
page1 から page2 に直接移動すると、page2 から #{page2Bean.target} にアクセスすると、値は「hello, world!」になります。
実際には、データを page1 ビューから page2 ビューにプッシュしています。もう 1 つのオプションは、page1 ビューから page2 ビューにデータをプルすることです。つまり、page2Bean で @Inject Page1Bean と @ViewAccessScoped を使用すると、page1Bean.getSource() にアクセスできるようになります (前のビューにある限り)。
これで問題ありませんが、現実の世界では、ユーザー入力に応じて、page1 から他の多くのページのいずれかに移動したい場合があります。したがって、 Page1Bean.java は次のようになります。
Page1Bean.java (改訂版)
私の質問ですが、page1Bean のメモリ フットプリントには常に page2Bean-page8Bean が含まれますか? または、実行時に @Inject された Bean の 1 つにアクセスする場合にのみメモリが使用されますか?
これがあまりにも素朴な質問ではないことを願っていますが、それがどのように機能するか正確にはわかりません。最初の質問に対する答えが「はい」の場合、多かれ少なかれ @SessionScoped! を使用することになります。
明確にしていただきありがとうございます。
codi - CODIプロジェクトのステージを設定するにはどうすればよいですか?
このwikiページは、簡単な投稿で見つけましたが、理解できません。JSFアプリケーションで、開発モードで実行したいことをCODIに伝えるにはどうすればよいですか?web.xml設定はありますか、それともどこかで注釈を使用する必要がありますか?
助けてくれてありがとう。
cdi - 基本クラスの @Inject は、基本クラス メソッドでは null、派生クラスでは OK
次のコードでは、SessionScoped Bean をステートレス EJB に注入しようとしていますが、EJB の抽象基本クラスで @Inject を実行したいと考えています。CDI仕様によると、これはうまくいくはずだと示唆しているようです(決して言葉を無駄にする仕様ではありません):
「4.2.会員レベルのメタデータの継承
クラス X がマネージド Bean またはセッション Bean Y の Bean クラスによって直接的または間接的に拡張されているとします。
X が注入されたフィールド x を宣言すると、Y は x を継承します。」
何が起こるかというと、継承された保護されたメンバー sessionView に TestEjb からアクセスできますが、基本クラス内のコードからはアクセスできません。「アクセスできる」とは、挿入されたメンバーが実行時にアクセス可能で、null でないことを意味します。
s1 は有効な SessionView 参照ですが、s2 は null です。
Glassfish 3.1.1 の Weld と組み合わせて MyFaces CODI 1.01 を使用しています。BaseClass から抽象を削除しようとし、さらに @Named を追加しようとしましたが、これは役に立たず、何が間違っているのかわかりません。
現状では、基本クラスから sessionView を継承し、それをパラメーターとして基本クラスのメソッドに戻す必要があるようです。だから、私が何かばかげたことをしているのか、誰かが指摘してくれるとありがたいです。おそらくこれは CODI/Weld の問題でしょうか?
ありがとう。
jsf-2 - @WindowScopedでオブジェクトを取得するにはどうすればよいですか?
この投稿では、動的ui:includeで、同じブラウザーの新しいウィンドウまたはタブをロードできる状態でオブジェクトを保存する方法を尋ねましたが、新しいウィンドウにも保存されませんでした。Adrian Mitevは@WindowScoped
、CODIと呼ばれるMyFaces拡張機能のオプションを使用するように私に言ったので、それを実装しようとしました。
今、私は盲目であり、Apache Wikiを開こうとすると、ブラウザが多くのページでクラッシュするため、ガイドを読むことができません。
ただし、プロジェクトにソースコードを追加しましたが、コンパイラはエラーを出しませんでした。問題は、保存したBeanを取得しようとしたときにページが@WindowScoped
正しく機能しないことです。
私は自分のBeanでこのコードを使用しています:
私はこのinclude.xhtml
コードでパラメータを取得します:
そして、他のBeanでは、このコードを使用してを取得しLogicBean
ます(そして、問題はこのコードにあると確信しています)
「正しい」LogicBeanオブジェクトを取得するにはどうすればよいですか?
jsf-2 - @WindowScopedで保存されたオブジェクトが正しく保存されているかどうかを確認するにはどうすればよいですか?
2日前に私はこの質問を書きました: @WindowScopedでオブジェクトを取得するにはどうすればよいですか? BalusCはいくつかの提案で答えましたが、私の問題がWindowScopedのオブジェクトが正しく保存されているのか、それを取得するためのコードが間違っているのかを理解するのに問題があります。
さて、私が言ったように、私は@WindowScopedアノテーションに保存したオブジェクトを持っていますが、このオブジェクトを取得できるのは初めてです!なんで?
私は疑問があります:MyFacesのCODI拡張機能は何らかの方法で構成できますか?または、プロジェクトにjarファイルを追加するだけで使用できますか?
ただし、問題がどこにあるのかわからないため、これらは私のコードの一部です。
LogicBean.java(取得する必要のあるオブジェクト):
include.xhtml:
ProgettiController.java
@ManagedProperty( "#{logicBean}")を使用して、スコープをWindowScopedとして設定しようとしましたが、何も変更されません...
編集:いくつかの新しい試行の後、奇妙な問題を見つけました。include.xhtmlに、これら2つのフィールドをチェックするための#{progettiController.logicBean.getPageIncluded()}と#{logicBean.getPageIncluded()}を追加しました。
さて、初めてアプリケーションをロードすると、変数が正しく設定され、必要なものが表示されます。2回目は、最初の変数が新しい値で設定されていますが、2番目は空で、何も表示されません。奇妙なことが起こります...アプリを再試行する必要がある場合は、次のようなフォームがあったindex.xhtmlを開く必要があります。
結果はどれですか?最初の変数は古い値(間違った)で設定されたままですが、2番目の変数は正しく設定されているため、ページを確認できます。誰かが私を助けてくれるなら、私は彼/彼女に永遠に感謝します!