2

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

4

2 回答 2

8

正如 Per 提到的,所有事件都需要一个表单:如果它们是完全刷新的,那么页面需要一个表单来发布以触发重定向;如果它们是部分刷新,则表单确定 AJAX POST 的内容。

XPages 运行时包括对表单组件的支持,但它不包含在组件面板中(并且无法通过 Designer Preferences 添加),因此将其添加到页面的唯一方法是直接编辑源 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>

这个组件有用有(至少)两个原因:

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

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

于 2013-04-07T05:58:18.720 回答
3

是的,因为您正在执行 HTTP POST 请求并且它们需要一个表单。

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

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

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

于 2013-04-07T04:33:31.463 回答