Xpages-如果验证失败,则用保存在文档中的值覆盖空白字段

Xpages-如果验证失败,则用保存在文档中的值覆盖空白字段,xpages,lotus-notes,lotus-domino,Xpages,Lotus Notes,Lotus Domino,我正在制作一个需要服务器端验证的Xpages应用程序 在我的表单中,当一个字段被清除并提交表单时(如果有另一个字段导致验证失败),将使用文档中最后成功保存的值重新填充该字段 这不是应该发生的事情。该字段应保持空白,直到页面刷新或用户输入另一个值 有人知道是什么导致了这一切吗 谢谢, Paul这取决于您的execId和refreshId 关于部分刷新期间发生的事情,请阅读这些博客文章,特别是第三部分 如果服务器端验证(或转换)失败,则不会更新XPage的服务器端映射,因为数据不足以进行服务器端处理

我正在制作一个需要服务器端验证的Xpages应用程序

在我的表单中,当一个字段被清除并提交表单时(如果有另一个字段导致验证失败),将使用文档中最后成功保存的值重新填充该字段

这不是应该发生的事情。该字段应保持空白,直到页面刷新或用户输入另一个值

有人知道是什么导致了这一切吗

谢谢,
Paul

这取决于您的execId和refreshId

关于部分刷新期间发生的事情,请阅读这些博客文章,特别是第三部分

如果服务器端验证(或转换)失败,则不会更新XPage的服务器端映射,因为数据不足以进行服务器端处理

因此,部分刷新会跳过Render Response,这会将应该显示的HTML发回页面。这包括字段中的值-您正在替换HTML,因此它必须

如果“保存”按钮正在刷新表单区域,则将替换其中的HTML,从而用最后一个有效值覆盖用户输入的值


推荐的方法将取决于您的页面架构和保存的内容。一种是将验证移到save()函数,此时DominoDocument(服务器上文档的前端包装器)中的值将被更新。另一种方法是只刷新验证区域,如果验证成功,请调用
context.reloadPage()
context.redirectToPage()
以有效地跳过部分刷新。

感谢您的帮助。据我所知,这仅仅是因为xpages中包含的默认转换器处理对象和/或字符串的方式。编写java自定义转换器可以解决所有问题。

谢谢您的回复。目前我的保存是一个简单的操作(保存数据源)。我重复了面板,每个面板都绑定了一个数据源。我的困惑源于这样一个事实:如果我有许多字段被标记为无效,那么我将其中一个字段更改为有效的数字,当验证失败时,新的数字仍将保留在输入中。但是,如果我将一个字段更改为null,则该字段将被覆盖。从你所说的,这被认为是标准?为什么只有当字段为空时才会出现这种情况?我如何才能避开它?对不起,我不确定我是否理解您的建议。如何将验证移到save()函数?有了一个按钮,我想我可以打开它,也可以关闭它(通过“无验证程序的流程”复选框)。我做了更多的实验,确定如果字段上有转换器,则从文档中重新填充一个空白字段(我使用的是数字转换器)。或者,如果字段是字符串,则空白值不会重新填充。有什么想法吗?它可能来自转换器被触发的时间、存储在组件中的内容以及传递给浏览器的HTML中的内容。可能需要一些调试才能理解。您将无法使用简单的操作来进行验证,您将需要SSJS(如果您的业务逻辑是Java的,则需要Java)。