我有一个使用view.postscript的xpage,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.resources>
<xp:dojoModule name="dojox.widget.Toaster"></xp:dojoModule>
<xp:styleSheet href="/.ibmxspres/dojoroot/dojox/widget/Toaster/Toaster.css"></xp:styleSheet>
</xp:this.resources>
<xp:scriptBlock id="scriptBlock1">
<xp:this.value><![CDATA[var Toaster = function(id, msg, type, duration, pos) {
type = (type == null) ? "message" : type;
duration = (duration == null) ? "5000" : duration;
pos = (pos == null) ? "br-up" : pos;
var obj = dijit.byId(id);
obj.positionDirection = pos;
obj.setContent(msg, type, duration);
obj.show();
}]]></xp:this.value>
</xp:scriptBlock>
<xp:div id="toaster" themeId="toaster" dojoType="dojox.widget.Toaster"></xp:div>
<xp:button value="Toaster" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:view.postScript("Toaster('"+getComponent("toaster").getClientId(facesContext)+"', 'toaster message!')");}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
但是当我点击按钮时,烤面包机无法显示。为什么? 我需要一种方法来显示由ssjs函数调用的烤面包机。 非常感谢。
答案 0 :(得分:1)
正如@Frantisek Kossuth所说,你正在重新提交页面。当您的refreshMode完成后,它将根据服务器值重新呈现页面。如果要进行客户端更改并在UI中反映它们,则无法完成更新。在不会更改的元素(如button1)上对页面进行部分刷新应该更新UI而不重建页面。
同样,为什么要通过SSJS完成这项工作?为什么不在按钮激活中使用客户端操作?如果这不是您未包含的较大函数调用的一部分,只需将事件代码从Server更改为Client并以此方式调用Toaster函数。这也允许您不必提交任何内容,在您的eventHandler中保留submit =“false”以避免不必要的功能。