Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPages:关闭时刷新面板的对话框_Xpages_Xpages Ssjs_Xpages Extlib - Fatal编程技术网

XPages:关闭时刷新面板的对话框

XPages:关闭时刷新面板的对话框,xpages,xpages-ssjs,xpages-extlib,Xpages,Xpages Ssjs,Xpages Extlib,我有一个文档,其中包含一个评级自定义控件(xInvolve,非常好!)。在此应用程序中,管理员希望能够删除某个文档或所有文档的某些评级(故意评级错误、文档的新版本、文档的更正…) 我在一个对话框(扩展库对话框,而不是Dojo对话框)的视图中显示评级。在该对话框中,我有一个“全部删除”按钮。该按钮调用一个SSJS函数,该函数删除当前打开的文档的评级文档,但我想刷新显示评级的面板,因为它现在应该为空 到目前为止,我能够关闭对话框,但似乎无法刷新面板。以下是“全部删除”按钮的代码: PanelHe

我有一个文档,其中包含一个评级自定义控件(xInvolve,非常好!)。在此应用程序中,管理员希望能够删除某个文档或所有文档的某些评级(故意评级错误、文档的新版本、文档的更正…)

我在一个对话框(扩展库对话框,而不是Dojo对话框)的视图中显示评级。在该对话框中,我有一个“全部删除”按钮。该按钮调用一个SSJS函数,该函数删除当前打开的文档的评级文档,但我想刷新显示评级的面板,因为它现在应该为空

到目前为止,我能够关闭对话框,但似乎无法刷新面板。以下是“全部删除”按钮的代码:


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控件的解决方案。此控件允许您直接从客户端javascript调用服务器代码。我经常使用它来调用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。您可以在启动窗口时使用
将其传递给客户端。你会像现在一样关上窗户(我想)

要调用服务的方法,可以使用
myRPC.callDeleteAllRatings(“Open ATM”,即“)

在我看来,一旦你了解了RPC可以为你做什么,你就会想知道没有它你是如何应付的。

正如Mark在上面的评论中所建议的,你应该能够使用onHide属性。例如,如果要刷新服务器端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>


我打算建议使用RPC控件。您可以使用客户端代码直接调用服务器进程。它被称为“远程服务”,位于数据访问下的选项板中。这是非常有用的。史蒂夫,这不是一个坏主意,也许一个带例子的答案可能会对本有所帮助。@pipalia,还有本,我会想出一些办法的。给我几分钟。请尝试Pipalia的答案,看看它是否适用于您。查看ExtLib演示数据库:我认为(从我的头顶上看),您可以将控件的ID作为参数添加到对话框的隐藏方法中。当对话框关闭时,该控件将被刷新。Ben,我很好奇你使用了哪种解决方案。如果是这些答案中的一个,请接受适当的答案,或者如果您使用自己的方式固定,请添加答案。谢谢
<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>