长话短说,我正在尝试在我正在处理的应用程序上迁移到MyFaces,当我注意到单个页面的ViewState 超过18MB 时。我怀疑这是因为我在这个页面上有超过10个表单,这是必要的,因为页面有超过10个ajaxified PrimeFaces对话框,而Ajax对话框需要自己的内部表单。似乎ViewState随每个表单呈指数级增长。我读到MyFaces在效率方面远远优于ViewState,所以我试图对我的应用程序进行原型设计以分析结果。
我注意到Mojarra从未出现问题的特定用例:
oncomplete
属性执行显示对话框的脚本。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的位置,但我想知道是否有一个可以在MyFaces中使用的上下文参数,以便它在这方面与EL表达式的行为类似于Mojarra?如果没有,那么这是Mojarra的一个错误,它应该从来没有用过吗?