Xpages 如何在读取模式下将变量从CSJS传递到SSJS
我希望能够提示用户评论,然后能够在电子邮件中发送此可变评论。但是,我无法将该变量从CSJS传递到SSJS。我的文档处于读取模式 这里是一个示例按钮代码,我似乎无法传递我的评论 有人知道怎么做吗 提前感谢:)Xpages 如何在读取模式下将变量从CSJS传递到SSJS,xpages,Xpages,我希望能够提示用户评论,然后能够在电子邮件中发送此可变评论。但是,我无法将该变量从CSJS传递到SSJS。我的文档处于读取模式 这里是一个示例按钮代码,我似乎无法传递我的评论 有人知道怎么做吗 提前感谢:) 不要将该字段绑定到文档(在读取模式下)。将其绑定到viewScope或requestScope变量 另外,寻找灵感。不要将该字段绑定到文档(在阅读模式下)。将其绑定到viewScope或requestScope变量 另外,寻找灵感。XSP.prompt将使用默认的浏览器提示窗口。在我看来,
不要将该字段绑定到文档(在读取模式下)。将其绑定到viewScope
或requestScope
变量
另外,寻找灵感。不要将该字段绑定到文档(在阅读模式下)。将其绑定到viewScope
或requestScope
变量
另外,寻找灵感。XSP.prompt
将使用默认的浏览器提示窗口。在我看来,它的功能有限,用户体验也不好。我建议您使用“拒绝”按钮打开一个带有编辑框的XPages扩展库对话框,以输入注释。将编辑框绑定到一个requestScope
变量-对话框关闭后,您不需要该值,因此需要在更高的范围级别使用它。在对话框的“确定”按钮中,运行SSJ并使用对话框组件的SSJShide()
方法关闭对话框,如果需要部分刷新,则在页面上为组件添加参数。XSP.prompt
将使用默认的浏览器提示窗口。在我看来,它的功能有限,用户体验也不好。我建议您使用“拒绝”按钮打开一个带有编辑框的XPages扩展库对话框,以输入注释。将编辑框绑定到一个requestScope
变量-对话框关闭后,您不需要该值,因此需要在更高的范围级别使用它。在对话框的“OK”按钮中,运行您的SSJS,并使用对话框组件的SSJShide()
方法关闭对话框,如果需要部分刷新,则在页面上为组件添加一个参数。过去为了实现这一点,我使用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的建议使用了扩展库。谢谢你的回复。起初,它对我不起作用。结果是,因为我把它和其他控件放在一个面板内,所以它不起作用。一旦我把它从面板中拿出来,单独使用,它就像一个符咒。我更喜欢这个选项,因为它允许我设计自己的对话框,而不是依赖于提示功能。谢谢你的回复和建议。这很管用:)起初,它对我不管用。结果是,因为我把它和其他控件放在一个面板内,所以它不起作用。一旦我把它从面板中拿出来,单独使用,它就像一个符咒。我更喜欢这个选项,因为它允许我设计自己的对话框,而不是依赖于提示功能。谢谢你的回复和建议。效果很好:)