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>