You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XPages出现NotSerializableException: UIDialog异常的排查求助

XPages ExtLib Dialog 序列化异常排查方向
  • 检查Dialog组件的视图状态与Bean引用

    • 确认XPages的viewState配置,若用server或client模式,Dialog可能被序列化到会话/客户端。排查是否有会话级托管Bean直接持有UIDialog实例——哪怕Bean本身可序列化,持有不可序列化的Dialog对象一定会触发异常。
    • 检查是否在Bean中通过FacesContext获取Dialog后缓存到了会话作用域属性里,这种隐式引用很容易被忽略。
  • 排查会话级对象的间接关联

    • 有些会话作用域的对象可能没直接存Dialog,但通过组件树、事件绑定等方式间接关联到了UIDialog。比如某个会话Bean的方法里,临时获取了Dialog组件但没及时释放,导致实例被会话持有。
    • 别只查自己写的Bean,还要看是否用了第三方库或ExtLib自带的会话级组件,有没有意外绑定Dialog状态。
  • 聚焦用户操作场景与环境

    • 找出现异常的用户问清楚操作路径:是不是在Dialog打开/关闭时触发了异步请求、部分刷新?这类操作容易导致组件状态被意外标记为需要序列化。
    • 确认用户用的浏览器版本,部分旧浏览器的客户端视图状态存储可能有兼容性问题,异常后状态残留到会话里,导致后续页面都报错。
  • 检查ExtLib与Domino环境版本

    • 看看用的Extension Library版本有没有已知的序列化bug,比如旧版本里UIDialog的内部属性不可序列化,直接升级到最新稳定版试试。
    • 检查Domino服务器的XPages补丁是否齐全,部分Domino版本的底层序列化机制有问题,装对应Fix Pack可能解决。
  • 开启序列化调试定位

    • 在测试环境的xsp.properties里加com.ibm.xsp.session.debugSerialization=true,服务器日志会输出序列化失败的具体对象链,能直接看到是哪个会话对象带了Dialog引用。
    • 写个简单测试代码,手动序列化会话里的所有对象,模拟服务器的序列化过程,更容易揪出隐藏的问题。
  • 检查Dialog的状态清理配置

    • 确认Dialog的destroyOnClose属性设为true,如果是false,Dialog实例会留在组件树里,大概率会被会话缓存住,增加序列化风险。
    • 排查页面部分刷新的逻辑,是不是刷新后Dialog的状态没正确销毁,导致残留的实例被序列化。

内容的提问来源于stack exchange,提问作者Andrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:41:08