如何在 XPage 上删除 HTML beforePageLoad 元素

How do I remove HTML elements beforePageLoad on an XPage

我有一个 XPage,可根据用户角色用于编辑或阅读。现在我需要实现这个功能。解决方案非常简单 - 只需删除添加、编辑和其他 HTML 元素。问题是我只能执行 SSJS 代码,但不能在页面加载时执行 CSJS。当我尝试在 SSJS 中这样做 document. 时,它给了我一个可预测的异常 - document 没有被识别。我如何在页面加载时执行它?

不要尝试从呈现的页面中删除 HTML 元素。

使用 属性 "rendered" 来确定应根据用户权限呈现哪些控件。 ("Rendered" 表示创建并发送到浏览器。)

您可以在此处设置属性

或此处

在那里插入 SSJS 代码,它应该 return 真(= 可见)或假(= 不可见)。

页面加载顺序为(XPages 事件以粗体显示):

  • XPage 上所有组件的服务器端映射和关联的自定义控件已加载到内存中
  • beforePageLoad:开发人员的服务器端代码针对这些组件运行
  • 服务器端组件根据计算或绑定到后端文档进行迭代和更新
  • afterPageLoad:开发人员的服务器端代码针对这些组件运行
  • beforeRenderResponse:开发人员的服务器端代码针对这些组件运行(使用此事件意味着它也在任何部分刷新期间处理)
  • 渲染响应迭代组件并计算出 HTML 传递给浏览器
  • afterRenderResponse:开发人员的服务器端代码针对组件运行

如您所见,SSJS 仅针对组件的服务器端映射运行,而不针对客户端 DOM。如果你想修改它,你可以使用 onClientLoad 但我认为它不会在部分刷新后运行。因此,您对 DOM 的修改可能会在部分刷新后丢失(您需要检查)。如果您希望对 DOM 元素的更改持续存在,有两个选项:

  1. 使用dojo.behavior。 jQuery可能有相应的调用可以使用。
  2. 在 Java 中编写渲染器以更改 HTML 为特定类型的组件输出。

听起来你的强项在客户端,所以前者可能是最好的选择。