我在这里要清楚这一点:我意外地将createForm属性设置为false。然后,我期望一个链接事件应该打开另一个页面,只是不再运行。 这是SSJS事件的预期行为,例如在禁用表单创建时链接?
答案 0 :(得分:8)
正如Per提到的,所有事件都需要一个表单:如果它们是完全刷新的,那么页面需要一个表单来发布以触发重定向;如果它们是部分刷新,则表单确定AJAX POST的内容。
XPage运行时包括对表单组件的支持,但它不包含在组件面板中(并且无法通过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>
这个组件有用(至少)有两个原因:
createForm
设置为false
时出现的链接应该会将用户导航到另一个页面;因此,此事件可能不需要知道任何字段值,因为用户无论如何都要离开当前页面。如果这是真的,请以自己的形式包装此链接,并在单独的表单中包含任何字段,并且链接将稍微快速执行,因为浏览器不必发布任何字段数据...只是链接本身的标识符。 因此,有很多用例,在XPage上使用一个或多个表单组件实际上更好...只记得所有数据和事件必须在表单内 - 无论是通常包含所有内容的默认表单,或手动包含的表单组件 - 并且该表单不能嵌套。您可以根据需要添加任意数量的表单组件,但它们必须是兄弟。任何表格都不能包含其他表格。
答案 1 :(得分:3)
是的,因为您正在进行HTTP POST请求并且需要表单。
您可以将POST请求链接转换为GET请求链接,而不是删除SSJS事件并创建“基本”链接:
<xp:link escape="true" text="Link" id="link2" value="/somepage.xsp"></xp:link>
但是如果你需要SSJS逻辑,那么你还需要一个表格。