Xpages Xpage,createForm=false是否禁用链接上的SSJS事件?

Xpages Xpage,createForm=false是否禁用链接上的SSJS事件?,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我问这个只是想澄清一下:我不小心将createForm属性设置为false。然后,我期望一个链接事件会打开另一个页面,但不再起作用。 这是SSJS事件的预期行为吗?例如,当您禁用表单创建时,在链接中?是,因为您正在执行HTTP POST请求,它们需要表单 您可以将POST请求链接转换为GET请求链接,而不是删除SSJS事件并创建“基本”链接: <xp:link escape="true" text="Link" id="link2" value="/somepage.xsp"><

我问这个只是想澄清一下:我不小心将createForm属性设置为false。然后,我期望一个链接事件会打开另一个页面,但不再起作用。
这是SSJS事件的预期行为吗?例如,当您禁用表单创建时,在链接中?

是,因为您正在执行HTTP POST请求,它们需要表单

您可以将POST请求链接转换为GET请求链接,而不是删除SSJS事件并创建“基本”链接:

<xp:link escape="true" text="Link" id="link2" value="/somepage.xsp"></xp:link>


但是,如果您需要SSJS逻辑,那么您还需要一个表单。

如前所述,所有事件都需要一个表单:如果完全刷新,那么页面需要一个表单来发布,以便触发重定向;如果是部分刷新,则表单将确定AJAX帖子的内容

XPages运行时包括对表单组件的支持,但它不包括在组件调色板中(并且不能通过设计器首选项添加),因此将其添加到页面的唯一方法是直接编辑源XML。例如:

<xp:form>
    <xp:link id="exampleLink" text="Example Text">
        <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:// event code}]]></xp:this.action>
        </xp:eventHandler>
    </xp:link>
</xp:form>

此组件之所以有用(至少)有两个原因:

  • 它可以提高性能。如果页面包含功能不同的不同区域,换句话说,页面一部分中的事件不需要知道页面任何其他部分中的数据——然后将每个部分包装在单独的表单组件中,会导致每个事件只发布与触发事件的组件包含在同一表单中的数据。您的问题表明,当您将
    createForm
    设置为
    false
    时断开的链接应将用户导航到另一个页面;因此,此事件可能不需要知道任何字段值,因为用户仍将离开当前页面。如果这是真的,请将此链接以其自己的形式包装,并将任何字段包装在单独的表单中,这样链接的执行速度会稍快一些,因为浏览器不必发布任何字段数据。。。只是链接本身的标识符
  • 它可以提供样式的灵活性。开发人员通常会从不熟悉Domino的设计师那里获得预先确定的CSS,而不考虑实际的最终用户需求——例如,如果网站设计是外包的,或者必须遵守公司的样式指南。当设计人员做出了某些假设,乍一看,这些假设与Domino生成的标记不兼容时,这常常成为紧张的根源。其中一个最常见的例子是当站点包含搜索功能时,因为大多数web开发人员将有一个用于搜索的表单和一个用于任何其他字段的单独同级表单。当设计人员或开发人员必须修改设计人员已经开发的样式表,以说明围绕所有内容的单个表单标记时,这可能会增加项目的成本。简言之,抑制默认表单元素并在需要时显式指定表单组件可以更容易地遵守外部强加的样式准则

  • 因此,在许多用例中,实际上最好在XPage上使用一个或多个表单组件。。。请记住,所有数据和事件都必须在一个表单中——无论是通常包含所有内容的默认表单,还是手动包含的表单组件——并且表单不能嵌套。可以添加任意数量的表单组件,但它们必须是同级。任何窗体都不能包含其他窗体

    谢谢Tim,非常详细的解释!我曾经读过关于
    xp:form
    StackOverflow本身的一些地方,但直到现在才知道它的实用性。谢谢蒂姆!