0

私の ADF フォームは、奇妙なキャッシュの問題を除いて正常に動作しています。データベースを使用しない ADF フォームがあります。ユーザーがスプレッドシートを選択できる入力ファイルフィールドがあります。[ファイルの処理] ボタンをクリックすると、スプレッドシートが読み取られ、いくつかのデータ操作が実行され、固定ファイルが書き込まれます。[ファイルの処理] ボタンを押すと、ファイル名を含むテキスト ボックスが、基本的にボックスが表示されていないラベルに変わり、アップロードしたファイルの名前が表示されます。ブラウザを閉じて再度開くと、最後に選択したファイルがラベルに表示されたままページが表示されます。また、プログラムの開始時にゼロに初期化されるグローバル変数 (クラス内) の値が、最初のテストの終了時に保持されていた最後の値で始まっていることにも気付きました。ブラウザでページを何度も更新しても、ページはリセットされませんでした。なぜこのように振る舞うのですか?ページが再び表示されたときにブラウザが閉じられていれば、最初からやり直すべきだと思います。プログラムの途中で再びゼロに設定することでグローバル変数の問題を回避しましたが、ファイル名の値をnullに設定できませんでした。ボタンをクリックするまで有効にならないようです。私がしなければならないある種のリフレッシュはありますか?Java でページ全体を更新しようとしましたが、うまくいかないようです。ボタンがクリックされるまで有効です。私がしなければならないある種のリフレッシュはありますか?Java でページ全体を更新しようとしましたが、うまくいかないようです。ボタンがクリックされるまで有効です。私がしなければならないある種のリフレッシュはありますか?Java でページ全体を更新しようとしましたが、うまくいかないようです。

また、私は Internet Explorer ブラウザーを使用していましたが、以前にページを表示したことのない別のブラウザーである Chrome で試してみたところ、まだファイルが選択されていました。新たに開始するように見えるのは、アプリケーションを再デプロイするときだけです。

jDeveloper 11.1.1.4 を使用しています。(11.1.1.6でも試してみました)Weblogicサーバーは10.3.6です。weblogic-application.xml ファイルのセッション タブを確認しました。そして、チェックされるのは、セッション トラッキングを有効にするおよびセッション トラッキングの URL 書き換えを有効にすることだけです。インメモリ セッションは無制限です。[Cookie] の下で、[Cookie を有効にする] と [Cookie の HTTP プロキシ キャッシュを有効にする] がオンになっています。[Cookie の有効期間] で、[Cookie は期限切れにならない] が選択されています。ただし、これが舞台裏で何かをしている場合を除き、Cookie を設定していません。永続ストアはメモリに設定されています。

他のすべては空白です。[セッション トラッキングを有効にする] と [URL 書き換えを有効にして再デプロイする] のチェックを外してみましたが、ページがハングしてまったく読み込まれませんでした。

だから、それが私がいるところです。おそらくinputFileオブジェクトをリセットする方法を見つけようとしていますが、これまでのところ運がありません。私は ADF と Java の初心者なので、それを念頭に置いて何か提案をしてください。もう少し詳細が必要になるかもしれません。ありがとう。

4

2 に答える 2

5

inputFile コンポーネントの value プロパティをマネージド Bean プロパティに明示的にバインドしていないと仮定すると、コンポーネント インスタンスで resetValue() を呼び出すだけで済みます。

  1. リクエストまたは backingBeanScope でマネージド Bean を作成する
  2. af:inputFile コンポーネントの「バインディング」プロパティを使用して、この Bean への参照を作成します (JSF コンポーネント参照)
  3. コンポーネント参照にアクセスし、その上で resetValue() を呼び出すためにリッスンするコマンド ボタンまたはイベントを用意します。

上記で動作します。さて、それを磨きましょう:

JSF 開発者の間では、バッキング Bean とコンポーネント バインディングの使用は推奨されておらず、代わりに動的コンポーネント ルックアップが推奨されています。したがって、ステップ 3 をスキップして、単に FacesContext.getCurrentInstance().getViewRoot().findComponent('id_of_inputFileComp'); を使用できます。RichInputFile インスタンスへのハンドルを取得します。このアプローチの難しい点は、コンテナーの命名に注意する必要があることです。

フランク

于 2012-07-23T06:31:11.767 に答える
1

inputFile の valueChageListener (ValueChangeEvent vce) で次の行を使用できます。

oracle.adf.view.rich.util.ResetUtils
ResetUtils.reset(vce.getComponent())

Jdeveloper バージョン 12.1.3

于 2014-12-14T18:57:29.333 に答える