Refresh 刷新新文档以使默认值显示在计算控件中
这个问题困扰了我一段时间,我似乎无法回避。所以我把它剥离到最基本的层次。 1.创建新的XPage并将其绑定到现有表单 2.创建了一个名为“displayPanel”的面板 3.在面板内部创建一个组合框,并给它一些值和任何有效值的默认值。 4.设置对displayPanel进行部分刷新的onChange事件 5.添加一个仅显示组合框值的计算字段。 6添加了一个按钮,可对displayPanel onClick进行部分刷新 打开XPage,计算字段为空,进行更改,计算字段显示 再次打开XPage并单击刷新按钮,此时将显示计算字段 现在这是一个非常简单的例子,但我需要做的实际上更复杂,但是comboBox的值(不需要是comboBox)在执行刷新之前不可用。这只是新文档首次获得默认值时出现的问题 我补充说:Refresh 刷新新文档以使默认值显示在计算控件中,refresh,xpages,default,Refresh,Xpages,Default,这个问题困扰了我一段时间,我似乎无法回避。所以我把它剥离到最基本的层次。 1.创建新的XPage并将其绑定到现有表单 2.创建了一个名为“displayPanel”的面板 3.在面板内部创建一个组合框,并给它一些值和任何有效值的默认值。 4.设置对displayPanel进行部分刷新的onChange事件 5.添加一个仅显示组合框值的计算字段。 6添加了一个按钮,可对displayPanel onClick进行部分刷新 打开XPage,计算字段为空,进行更改,计算字段显示 再次打开XPage并单
view.postScript("XSP.partialRefreshGet('#{id:displayPanel}')")
对每一个页面事件,但它似乎不会执行实际的页面刷新,如单击按钮或进行更改
我不知道如何使这项工作成功。如果我能用这个简单的例子,剩下的我需要的就很容易了
谢谢Fredrik的做法是正确的——您应该在活动期间手动设置值——但我要补充两个注意事项:
- 调用
而不是setValue
(例如replaceItemValue
)。比较优势可能不适用于这种特定情况,但您应该习惯于总是调用document1.setValue(“myComboBox”,“默认值”);
而不是setValue
(和replaceItemValue
而不是getValue
),这样,当您遇到一个真正不同的场景时,你只需免费获得福利。。。其余时间,这些方法是等效的,因此您最好只使用需要较少键入的方法。:)李>getItemValue
- 您可能需要在
中执行此操作:在afterPageLoad
期间,数据源可能尚未就绪;根据您在页面其他位置引用默认值的原因,beforePageLoad
可能太晚了;而且beforeRenderResponse
肯定太晚了afterRenderResponse
defaultValue
属性的行为与我们期望的不一样,特别是对于我们这些有开发Notes客户端应用经验的人来说
XPages引擎将每个HTTP请求的处理分成几个“阶段”。根据请求类型(初始页面加载、部分刷新事件等)和其他因素,生命周期将由多达6个阶段和2个阶段组成
对这些阶段进行了很好的描述,但在这个问题的背景下,以下内容特别令人感兴趣:
- 应用请求值
当事件针对已加载的页面运行时(例如,用户单击按钮,或从具有
事件的组合框中选择值等),发送到服务器以触发事件的HTTP请求包括表示所有可编辑组件的值的POST数据。此阶段将这些值临时存储在任何受影响组件的onChange
属性中,但数据源尚不“知道”新值是什么submittedValue
- 流程验证 此阶段运行任何适用的验证器,如果任何验证器失败,则直接跳到最后一个阶段(这意味着它从未运行所触发事件的代码)
- 更新模型值
如果没有验证失败(或未定义任何验证),此阶段将获取提交的值并实际将其存储在相应的数据源中。在此之前,数据源完全不知道存在任何用户交互。这是为了避免用户输入可能无效而过早地污染任何后端数据。记住,不是每个数据源都是“文档”;它可能是通过
更改的关系数据,即时UPDATE
被称为。。。这就是这个阶段的基本功能:它获取setValue
并调用相应数据源上的submittedValue
(然后将setValue
设置为submittedValue
)。这种分离允许组件只是后端数据状态的可视化表示——用户交互的可视化表示;我们的代码应该始终通过数据源的抽象层直接与后端数据交互null
- 呈现响应 所有其他阶段运行(或跳过)后,此阶段将向使用者发送响应。换句话说,它将HTML(或JSON、XML或PDF等)发送回浏览器。但在这个问题的上下文中,最突出的一点是,在初始页面加载时总是跳过前面的阶段。当用户第一次访问页面时,他们还没有机会输入任何数据,因此没有要应用的请求值。由于没有发布任何数据,因此没有需要验证的内容。而且——最重要的是——没有什么可以推送到数据模型。因此,组件树的表示(或其子集,在部分刷新事件的情况下)始终需要发送给用户,但在用户与该表示交互之前,数据源将保持在呈现最新响应时的任何状态。。。这就是为什么,如果您希望数据源的特定属性在用户与它交互之前具有特定值,那么您的代码将