XPages:dialog 框在关闭时刷新面板
XPages:dialog box refreshing a panel on close
我有一个包含评级自定义控件的文档(xInvolve,非常棒!)。在此应用程序中,管理员希望能够删除某个文档或所有文档的某些评级(故意的差评、文档的新版本、对文档所做的更正......)。
我在对话框(扩展库对话框,不是 Dojo 对话框)中的视图中显示评级。在该对话框中,我有一个 "Delete All" 按钮。该按钮调用一个 SSJS 函数,删除当前打开文档的评级文档,但我想刷新显示评级的面板,因为它现在应该是空的。
到目前为止,我可以关闭对话框,但我似乎无法刷新面板。这是 "Delete All" 按钮的代码:
<xp:button value="Delete All" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:confirm
message="Are you sure you want to proceed?">
</xp:confirm>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:deleteAllRatings(pageDocument.getDocument().getUniversalID());
var c = getComponent("dialogPageRatings");
c.hide("PanelHeader")}]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>
PanelHeader 是插入 xRating 控件的面板。
我应该尝试将代码放在对话框的 onClose 事件中吗?我试过了,但我没有得到更多的运气。
谢谢
因此您可以使用客户端代码来实现此目的。这就是我们所做的:
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var strClientCode = "$('#editDeliveryAddressDialog').modal('hide'); window.location.reload();"
view.postScript(strClientCode);}]]></xp:this.script>
</xp:executeScript>
希望对您有所帮助。
本,
这是一个使用 RPC 控件的解决方案。此控件允许您直接从客户端 java 脚本调用服务器代码。我经常用它来调用 java 方法,但没有用它来调用库中的 SSJS 函数。我假设它会一样工作。
<xe:jsonRpcService id="jsonRpcService1" serviceName="myRPC"
pathInfo="rpc">
<xe:this.methods>
<xe:remoteMethod name="callDeleteAllRatings">
<xe:this.script><![CDATA[deleteAllRatings(universalID)}]]></xe:this.script>
<xe:this.arguments>
<xe:remoteMethodArg name="universalID" type="string" />
</xe:this.arguments>
</xe:remoteMethod>
</xe:this.methods>
</xe:jsonRpcService>
您将无法在 RPC 中使用 getComponent,因此您需要传递 UNID。您可以在启动 window 时使用 <xp:hiddenInput>
将其传递给客户端。您将以与现在相同的方式关闭 window(我认为)。
要调用服务的方法,您可以使用 myRPC.callDeleteAllRatings("Open ATM", "");
同样,您可以从客户端调用 RPC。
IMO,一旦您了解了 RPC 可以为您做什么,您就会想知道没有它您是如何做到的。
正如 Mark 在上面评论中所建议的那样,您应该能够使用 onHide 属性。例如,如果你想刷新一个带有 serverSide id panel1
的面板
<xe:dialog id="dialog1" title="Example Dialog"
onHide=" XSP.partialRefreshGet('#{id:panel1}'); ">
这对我有用
能不能只做局部刷新?我用一个简单的对话框来做到这一点...
<xp:button value="Save and Close" id="button2" styleClass="btn btn-primary">
<xp:eventHandler event="onclick"
submit="true" refreshMode="partial"
refreshId="panelRefresh"
disableValidators="true"
onComplete="$('#myModal').modal('hide');">
<xp:this.action><![CDATA[#{javascript:var value:string=getComponent("inputText1").value;
document1.replaceItemValue("modalTest",value)}]]>
</xp:this.action>
</xp:eventHandler>
</xp:button>
我有一个包含评级自定义控件的文档(xInvolve,非常棒!)。在此应用程序中,管理员希望能够删除某个文档或所有文档的某些评级(故意的差评、文档的新版本、对文档所做的更正......)。
我在对话框(扩展库对话框,不是 Dojo 对话框)中的视图中显示评级。在该对话框中,我有一个 "Delete All" 按钮。该按钮调用一个 SSJS 函数,删除当前打开文档的评级文档,但我想刷新显示评级的面板,因为它现在应该是空的。
到目前为止,我可以关闭对话框,但我似乎无法刷新面板。这是 "Delete All" 按钮的代码:
<xp:button value="Delete All" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:confirm
message="Are you sure you want to proceed?">
</xp:confirm>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:deleteAllRatings(pageDocument.getDocument().getUniversalID());
var c = getComponent("dialogPageRatings");
c.hide("PanelHeader")}]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>
PanelHeader 是插入 xRating 控件的面板。
我应该尝试将代码放在对话框的 onClose 事件中吗?我试过了,但我没有得到更多的运气。
谢谢
因此您可以使用客户端代码来实现此目的。这就是我们所做的:
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:var strClientCode = "$('#editDeliveryAddressDialog').modal('hide'); window.location.reload();"
view.postScript(strClientCode);}]]></xp:this.script>
</xp:executeScript>
希望对您有所帮助。
本,
这是一个使用 RPC 控件的解决方案。此控件允许您直接从客户端 java 脚本调用服务器代码。我经常用它来调用 java 方法,但没有用它来调用库中的 SSJS 函数。我假设它会一样工作。
<xe:jsonRpcService id="jsonRpcService1" serviceName="myRPC"
pathInfo="rpc">
<xe:this.methods>
<xe:remoteMethod name="callDeleteAllRatings">
<xe:this.script><![CDATA[deleteAllRatings(universalID)}]]></xe:this.script>
<xe:this.arguments>
<xe:remoteMethodArg name="universalID" type="string" />
</xe:this.arguments>
</xe:remoteMethod>
</xe:this.methods>
</xe:jsonRpcService>
您将无法在 RPC 中使用 getComponent,因此您需要传递 UNID。您可以在启动 window 时使用 <xp:hiddenInput>
将其传递给客户端。您将以与现在相同的方式关闭 window(我认为)。
要调用服务的方法,您可以使用 myRPC.callDeleteAllRatings("Open ATM", "");
同样,您可以从客户端调用 RPC。
IMO,一旦您了解了 RPC 可以为您做什么,您就会想知道没有它您是如何做到的。
正如 Mark 在上面评论中所建议的那样,您应该能够使用 onHide 属性。例如,如果你想刷新一个带有 serverSide id panel1
的面板<xe:dialog id="dialog1" title="Example Dialog"
onHide=" XSP.partialRefreshGet('#{id:panel1}'); ">
这对我有用
能不能只做局部刷新?我用一个简单的对话框来做到这一点...
<xp:button value="Save and Close" id="button2" styleClass="btn btn-primary">
<xp:eventHandler event="onclick"
submit="true" refreshMode="partial"
refreshId="panelRefresh"
disableValidators="true"
onComplete="$('#myModal').modal('hide');">
<xp:this.action><![CDATA[#{javascript:var value:string=getComponent("inputText1").value;
document1.replaceItemValue("modalTest",value)}]]>
</xp:this.action>
</xp:eventHandler>
</xp:button>