0

长话短说,当我注意到单个页面的 ViewState大小超过 18MB时,我正在尝试在我正在开发的应用程序上迁移到 MyFaces。我怀疑这是因为我在这个页面上有超过 10 个表单,这是必要的,因为该页面有超过 10 个 ajaxified PrimeFaces 对话框,而 Ajax 对话框需要它们自己的内部表单。ViewState 似乎随着每种形式呈指数增长。我读到 MyFaces 在 ViewState 方面的效率要高得多,因此我正在尝试对我的应用程序进行原型化以分析结果。

我注意到一个特定的用例,它从来不是 Mojarra 的问题:

  • 我有一个 PrimeFaces 数据表
  • 单击一行上的编辑按钮
  • 所选行更新为模型
  • 我呈现编辑对话框的表单以显示所选行的托管 bean 值
  • 编辑按钮oncomplete属性执行显示对话框的脚本。
  • 用户提交表单的普通 LOB 数据输入表单
  • 坚持到数据库
  • Ajax 使用该记录的新值呈现数据表

MyFaces 的问题似乎是它对 EL 表达式更加挑剔,如果它恰好为 null,则在数据表选定值上抛出 NullPointerException。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,但我想知道是否有一个上下文参数可以在 MyFaces 中使用,以便它在这方面与 EL 表达式表现得像 Mojarra?如果不是,那么这是 Mojarra 的一个错误,它根本不应该起作用?

4

0 回答 0