0

簡単に言うと、現在取り組んでいるアプリケーションで MyFaces への移行を試しているところ、ViewStateのサイズが 1 ページで 18 MB を超えていることに気付きました。これは、このページに 10 を超えるフォームがあるためだと思われます。これは、このページに 10 を超える ajax 化された PrimeFaces ダイアログがあり、Ajax ダイアログには独自の内部フォームが必要であるためです。ViewState は各フォームで指数関数的に成長するようです。MyFaces は ViewState に関して効率がはるかに優れていると読んだので、結果をプロファイリングするためにアプリケーションのプロトタイプを作成しようとしています。

Mojarra ではまったく問題にならなかった特定の使用例に気付きました。

  • PrimeFaces データ テーブルがあります
  • 行の編集ボタンをクリックします
  • 選択した行がモデルに更新されます
  • 編集ダイアログのフォームをレンダリングして、選択した行のマネージド Bean 値を表示します
  • Edit ボタンoncomplete属性は、ダイアログを表示するスクリプトを実行します。
  • ユーザーがフォームを送信する通常の LOB データ入力フォーム
  • DB に永続化
  • Ajax は、そのレコードの新しい値でデータ テーブルをレンダリングします。

MyFaces の問題は、データ テーブルの選択された値が null である場合に NullPointerException をスローすることにより、EL 式がよりうるさいことのようです。これは、Mojarra では (善悪を問わず) 発生しませんでした。例えば。

<h:form>
<p:dataTable var="bla" selection="#{managedBean.selectedValue}" ...>
  <p:column header="Options">
    <p:commandButton ajax="true" value="Edit" process="@this" update=":editDialogForm"
      oncomplete="editDialogWidget.show()" />
  </p:column>
    ...
</p:dataTable>
</h:form>

....

<p:dialog widgetVar="editDialogWidget" header="Edit stuff" ...>
  <h:form id="editDialogForm">
    <h:inputText value="#{managedBean.selectedValue.someHibernateProperty}" />
    ...
  </h:form>
</p:dialog>

これがどこで NPE になるかははっきりとわかりますが、EL 式でこの点で Mojarra のように動作するように、MyFaces で使用できるコンテキスト パラメーターがあるかどうか疑問に思っていました。そうでない場合、これはまったく機能しないはずの Mojarra のバグですか?

4

0 に答える 0