2013-04-07 42 views

回答

8

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

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> 

有(至少)两个原因,这部分是有用的:

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

所以有很多使用情况下,它实际上是最好的一个XPage使用一个或多个表单组件......只记得所有的数据和事件必须是一个形式里面 - 默认的形式是否通常包围所有内容或手动包含的表单组件 - 而且这些表单不能嵌套。您可以添加尽可能多的表单组件,但它们必须是兄弟姐妹。没有任何表单可以包含其他表单

+0

谢谢蒂姆,非常详细的解释! – 2013-04-07 11:38:01

+0

我也在我的复杂样本上测试了它 - 它的工作原理! – 2013-04-07 12:18:08

+0

我已经阅读过有关'xp:form'的一些关于StackOverflow本身的内容,但直到现在才知道它的实用性。谢谢蒂姆! – Naveen 2013-04-08 12:23:38

3

是的,因为你正在做HTTP POST请求,他们需要一个表单。

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

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

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

+0

好点,谢谢您的评论 – 2013-04-07 11:38:20