Xpages 如何在读取模式下将变量从CSJS传递到SSJS

Xpages 如何在读取模式下将变量从CSJS传递到SSJS,xpages,Xpages,我希望能够提示用户评论,然后能够在电子邮件中发送此可变评论。但是,我无法将该变量从CSJS传递到SSJS。我的文档处于读取模式 这里是一个示例按钮代码,我似乎无法传递我的评论 有人知道怎么做吗 提前感谢:) 不要将该字段绑定到文档(在读取模式下)。将其绑定到viewScope或requestScope变量 另外,寻找灵感。不要将该字段绑定到文档(在阅读模式下)。将其绑定到viewScope或requestScope变量 另外,寻找灵感。XSP.prompt将使用默认的浏览器提示窗口。在我看来,

我希望能够提示用户评论,然后能够在电子邮件中发送此可变评论。但是,我无法将该变量从CSJS传递到SSJS。我的文档处于读取模式

这里是一个示例按钮代码,我似乎无法传递我的评论

有人知道怎么做吗

提前感谢:)



不要将该字段绑定到文档(在读取模式下)。将其绑定到
viewScope
requestScope
变量


另外,寻找灵感。

不要将该字段绑定到文档(在阅读模式下)。将其绑定到
viewScope
requestScope
变量


另外,寻找灵感。

XSP.prompt
将使用默认的浏览器提示窗口。在我看来,它的功能有限,用户体验也不好。我建议您使用“拒绝”按钮打开一个带有编辑框的XPages扩展库对话框,以输入注释。将编辑框绑定到一个
requestScope
变量-对话框关闭后,您不需要该值,因此需要在更高的范围级别使用它。在对话框的“确定”按钮中,运行SSJ并使用对话框组件的SSJS
hide()
方法关闭对话框,如果需要部分刷新,则在页面上为组件添加参数。

XSP.prompt
将使用默认的浏览器提示窗口。在我看来,它的功能有限,用户体验也不好。我建议您使用“拒绝”按钮打开一个带有编辑框的XPages扩展库对话框,以输入注释。将编辑框绑定到一个
requestScope
变量-对话框关闭后,您不需要该值,因此需要在更高的范围级别使用它。在对话框的“OK”按钮中,运行您的SSJS,并使用对话框组件的SSJS
hide()
方法关闭对话框,如果需要部分刷新,则在页面上为组件添加一个参数。

过去为了实现这一点,我使用CSS隐藏输入字段和按钮。客户端脚本与按钮操作分开定义

<xp:text escape="false"><xp:this.value><![CDATA[
    <script>

    function promptBox(){
        // ... do whatever to get the data input into
        // XSP.getElementById("#{id:inputText1}").value 
        // OR if using JQuery $('.tester).val()

        // then click hidden Save button
        $('.reject').click()
        // OR
        XSP.getElementById("#{id:button1}").click()
    }
    </script>
]]></xp:this.value></xp:text>

<!-- hide the input field with CSS -->
<xp:inputText
    id="inputText1"
    value="#{viewScope.tester}"
    defaultValue="#{viewScope.tester}"
    styleClass="tester hidden">
</xp:inputText>

<!-- hide the button with CSS -->
<xp:button
    value="Reject"
    styleClass="reject hidden"
    id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action>
        <xp:actionGroup>

            <xp:executeScript>
                <xp:this.script><![CDATA[#{javascript:var doc:NotesDocument = currentDocument.getDocument();
doc.replaceItemValue("status", "0"); 
doc.save();
database.updateFTIndex(false);

var comment = viewScope.tester; /* scoped variable already set */

var ndoc = database.createDocument();
ndoc.appendItemValue("from", "tome@somewhere.com");
ndoc.appendItemValue("SendTo", "someone@somewhere.com);
ndoc.appendItemValue("subject", "My Subject");
var rti:NotesRichTextItem = ndoc.createRichTextItem("Body");
rti.appendText("Reason:" + comment + "\n\n");
ndoc.send()

}]]></xp:this.script>
            </xp:executeScript>
            <xp:openPage name="/mainpage.xsp"></xp:openPage>
        </xp:actionGroup>
</xp:button>

<!-- use link for button - style it with CSS -->
<a href="javascript:promptBox()"  class="btn btn-success">Reject</a>

函数promptBox(){
//…尽一切努力将数据输入
//getElementById(“#{id:inputText1}”).value
//或者如果使用JQuery$('.tester).val()
//然后单击隐藏保存按钮
$('.reject')。单击()
//或
getElementById(“#{id:button1}”)。单击()
}
]]>

为了在过去实现这一点,我使用CSS来隐藏输入字段和按钮。客户端脚本与按钮操作分开定义

<xp:text escape="false"><xp:this.value><![CDATA[
    <script>

    function promptBox(){
        // ... do whatever to get the data input into
        // XSP.getElementById("#{id:inputText1}").value 
        // OR if using JQuery $('.tester).val()

        // then click hidden Save button
        $('.reject').click()
        // OR
        XSP.getElementById("#{id:button1}").click()
    }
    </script>
]]></xp:this.value></xp:text>

<!-- hide the input field with CSS -->
<xp:inputText
    id="inputText1"
    value="#{viewScope.tester}"
    defaultValue="#{viewScope.tester}"
    styleClass="tester hidden">
</xp:inputText>

<!-- hide the button with CSS -->
<xp:button
    value="Reject"
    styleClass="reject hidden"
    id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action>
        <xp:actionGroup>

            <xp:executeScript>
                <xp:this.script><![CDATA[#{javascript:var doc:NotesDocument = currentDocument.getDocument();
doc.replaceItemValue("status", "0"); 
doc.save();
database.updateFTIndex(false);

var comment = viewScope.tester; /* scoped variable already set */

var ndoc = database.createDocument();
ndoc.appendItemValue("from", "tome@somewhere.com");
ndoc.appendItemValue("SendTo", "someone@somewhere.com);
ndoc.appendItemValue("subject", "My Subject");
var rti:NotesRichTextItem = ndoc.createRichTextItem("Body");
rti.appendText("Reason:" + comment + "\n\n");
ndoc.send()

}]]></xp:this.script>
            </xp:executeScript>
            <xp:openPage name="/mainpage.xsp"></xp:openPage>
        </xp:actionGroup>
</xp:button>

<!-- use link for button - style it with CSS -->
<a href="javascript:promptBox()"  class="btn btn-success">Reject</a>

函数promptBox(){
//…尽一切努力将数据输入
//getElementById(“#{id:inputText1}”).value
//或者如果使用JQuery$('.tester).val()
//然后单击隐藏保存按钮
$('.reject')。单击()
//或
getElementById(“#{id:button1}”)。单击()
}
]]>

谢谢你的回复。我以前看过那篇文章,试了试,结果没用。然后我从SSJS var comment=requestScope.tester调用它;所以在简化了我的代码之后,我的按钮和隐藏的输入没有起作用,因为它们和其他控制元素在一个面板中。一旦我把我的按钮和隐藏的输入从面板中拿出来,让它们自己使用,它就工作得很好。因此,如果要使用此方法,只需确保它不在同一面板内。不管怎么说,这最终奏效了,但我最终还是按照Paul的建议使用了扩展库。谢谢你的回复。谢谢你的回复。我以前看过那篇文章,试了试,结果没用。然后我从SSJS var comment=requestScope.tester调用它;所以在简化了我的代码之后,我的按钮和隐藏的输入没有起作用,因为它们和其他控制元素在一个面板中。一旦我把我的按钮和隐藏的输入从面板中拿出来,让它们自己使用,它就工作得很好。因此,如果要使用此方法,只需确保它不在同一面板内。不管怎么说,这最终奏效了,但我最终还是按照Paul的建议使用了扩展库。谢谢你的回复。起初,它对我不起作用。结果是,因为我把它和其他控件放在一个面板内,所以它不起作用。一旦我把它从面板中拿出来,单独使用,它就像一个符咒。我更喜欢这个选项,因为它允许我设计自己的对话框,而不是依赖于提示功能。谢谢你的回复和建议。这很管用:)起初,它对我不管用。结果是,因为我把它和其他控件放在一个面板内,所以它不起作用。一旦我把它从面板中拿出来,单独使用,它就像一个符咒。我更喜欢这个选项,因为它允许我设计自己的对话框,而不是依赖于提示功能。谢谢你的回复和建议。效果很好:)