代码之家  ›  专栏  ›  技术社区  ›  Ron

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

  •  1
  • Ron  · 技术社区  · 7 年前

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

    有人知道怎么做吗?

    <xp:panel readonly="false">
        <xp:inputHidden id="inputHidden1" value="#{viewScope.tester}">
        </xp:inputHidden>
    </xp:panel>
    
    <xp:button value="Reject" id="button7" style="margin-right:5.0px"
    save="false">
    
    <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; /* HOW DO I GET COMMENT FROM CSJS TO HERE */
    
    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:this.action>
    
        <xp:this.script>
            <xp:executeClientScript>
                <xp:this.script><![CDATA[
    var comment = XSP.prompt("Please enter a comment:");
    
    
    XSP.getElementById("#{id:inputHidden1}").value = comment;
    
    
    /*
    XSP.partialRefreshGet("#{id:computedField1}", 
    {
    params:{"para1":"1", "para2":"2"}
    });
    
    */
    
    ]]></xp:this.script>
            </xp:executeClientScript>
        </xp:this.script>
    </xp:eventHandler>
    </xp:button>
    
    3 回复  |  直到 7 年前
        1
  •  0
  •   Paul Stephen Withers    7 年前

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

        2
  •  0
  •   Frantisek Kossuth    7 年前

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

    还有,看 here 寻求灵感。

        3
  •  0
  •   teleman    7 年前

    <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>
    

    我不喜欢将客户端和服务器端脚本绑定到同一个按钮,代码的执行顺序不容易管理。还有其他方法可以组合这些客户端字段和服务器端脚本,但这只是一个简单的演示。