1

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

4

2 回答 2

5

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

改用属性“rendered”来确定应根据用户权限呈现哪些控件。(“渲染”是指创建并发送到浏览器。)

您可以在此处设置此属性

在此处输入图像描述

或在这里

在此处输入图像描述

在此处插入应返回 true(= 可见)或 false(= 不可见)的 SSJS 代码。

于 2018-02-12T09:45:50.537 回答
4

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

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

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

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

听起来您的优势在于客户端,因此前者可能是最佳选择。

于 2018-02-12T09:51:05.773 回答