如何在XPage上删除PageLoad之前的HTML元素

时间:2018-02-12 09:32:47

标签: html xpages xpages-ssjs ssjs

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

2 个答案:

答案 0 :(得分:5)

请勿尝试从呈现的页面中删除HTML元素。

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

您可以在此处设置此属性

enter image description here

或在这里

enter image description here

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

答案 1 :(得分:4)

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

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

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

  1. 使用dojo.behavior。 jQuery可能有一个可以使用的相应调用。
  2. 使用Java编写渲染器以更改为特定类型的组件输出的HTML。
  3. 听起来你的优势在于客户端,所以前者可能是最好的选择。