0

我的 XPage 上有一个通过按钮打开的扩展库对话框控件:

XSP.openDialog("#{id:commentsDialog}");

在我的 XPage 上,我有一个名为 document1 的文档源。当我将这些字段(从 Data Palette 拖放)放在对话框控件上时,字段 (docID) 存在,但不可编辑——看起来为显示计算:

<xe:dialog id="commentsDialog" title="Comments" styleClass="dialogBoxComments">
    <xp:panel>
        <xp:table style="width:100%">
            <xp:tr>
                <xp:td>
                    <xp:label value="Enter your comments..." id="label2"></xp:label>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:inputTextarea id="comments" style="width:100%;height:100px">
                    </xp:inputTextarea>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:div style="text-align:right">
                        <xp:button value="Submit" id="submitButton">
                            <xp:eventHandler event="onclick" submit="true"
                                refreshMode="complete">
                                <xp:this.action><![CDATA[#{javascript:saveComments();}]]></xp:this.action>
                            </xp:eventHandler>
                        </xp:button>
                        <xp:button id="cancelButton" value="Cancel">
                            <xp:eventHandler event="onclick" submit="false">
                                <xp:this.script><![CDATA[XSP.closeDialog("#{id:commentsDialog}");]]></xp:this.script>
                            </xp:eventHandler>
                        </xp:button>
                    </xp:div>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:inputText value="#{document1.docID}" rendered="false"
                        id="docID"></xp:inputText>
                </xp:td>
            </xp:tr>
        </xp:table>
    </xp:panel>
    <xp:br></xp:br>
</xe:dialog>

我有一个输入文本区域,用户将在其中输入值,但我无法使用 SSJS 获取该值。我试过了:

    function getComponentValue(id){
      var field = getComponent(id);
      var value = field.getSubmittedValue();
      if( null == value ){
         // else not yet submitted
         value = field.getValue();
      }
      return value
    }

要获取输入文本区域中的值,我不确定该怎么做,因为如果我绑定到 Data Palette 中的现有字段,它看起来不可编辑并且我无法输入任何值。

此外,我在调用一些 SSJS 的对话框控件上有一个提交按钮:

function saveComments() {
// Need to create a comments doc for the movie...
var db:NotesDatabase = session.getCurrentDatabase();
var doc:NotesDocument = currentDocument.getDocument();
var unid = getComponentValue("docID");
// Grab comments from dialog...
var comments = getComponentValue("comments");
// Create the comments doc...   
var docComm:NotesDocument = db.createDocument();
docComm.replaceItemValue("Form", "comment");    
var nowValue = @Text(@Now());
var currentUser = sessionScope.get("currentUser");
docComm.replaceItemValue("cm_Key", unid);
docComm.replaceItemValue("cm_By", currentUser);
docComm.replaceItemValue("cm_Date", nowValue);
docComm.replaceItemValue("cm_Key", unid);
docComm.save();
}

我将如何从服务器端关闭对话框?

所以,三件事(感谢你的耐心):

  1. 如何使对话框控件上的字段可编辑
  2. 如何从未绑定到文档1上的字段的输入文本区域中获取值
  3. 如何从服务器端关闭对话框

谢谢!


编辑:我在此评论中进行了编辑,以便我可以正确显示图像...

  1. 我使 docID 字段可见,它看起来是经过计算的,不可编辑。
  2. 我添加了第二个文档数据源(commentDocument)并将字段的值设置为数据调色板值——字段不出现,认为它可能是不可编辑的。

这是图像 - 绿色框是注释字段(来自 commentsDocument 源的 cm_Comm)应该存在的位置,红色框是不可编辑的 docID 字段: 对话框控件上不可编辑的字段

现在是控件背后的代码:

<xe:dialog id="commentsDialog" title="Comments" styleClass="dialogBoxComments">
    <xp:panel>
        <xp:table style="width:100%">
            <xp:tr>
                <xp:td>
                    <xp:label value="Enter your comments..." id="label2"></xp:label>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:inputTextarea id="comments" style="width:100%;height:100px"
                        value="#{commentDocument.cm_Comm}">
                    </xp:inputTextarea>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:div style="text-align:right">
                        <xp:button value="Submit" id="submitButton">
                            <xp:eventHandler event="onclick" submit="true"
                                refreshMode="complete">
                                <xp:this.action><![CDATA[#{javascript:saveComments();getComponent("commentsDialog").hide();}]]></xp:this.action>
                            </xp:eventHandler>
                        </xp:button>
                        <xp:button id="cancelButton" value="Cancel">
                            <xp:eventHandler event="onclick" submit="false">
                                <xp:this.script><![CDATA[XSP.closeDialog("#{id:commentsDialog}");]]></xp:this.script>
                            </xp:eventHandler>
                        </xp:button>
                    </xp:div>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:inputText value="#{document1.docID}" id="docID"></xp:inputText>
                </xp:td>
            </xp:tr>
        </xp:table>
    </xp:panel>
    <xp:br></xp:br>
</xe:dialog>

请让我知道我在做什么不正确-感谢!

4

2 回答 2

4

如何使对话框控件上的字段可编辑

  1. 将 value 属性添加到您的 inputTextarea - 例如 viewScope 变量 ( value="#{viewScope.myTextArea}"),以便 XPages (JSF) 有一个位置来存储您稍后要处理的文本区域中的内容。

  2. 您的 inputText 字段设置为rendered="false". 因此,首先要设置要呈现的控件(因此删除 render="false" 属性)。

如何从未绑定到文档1上的字段的输入文本区域中获取值

参见上面的答案 1。

如何从服务器端关闭对话框

使用getComponent("commentsDialog").hide().

于 2013-03-02T20:49:42.880 回答
1

使用“comment”变量创建第二个 DominoDocument 数据源。将其范围设置为“请求”。为 cm_Key、cm_By 和 cm_Date 创建隐藏的输入组件,为每个组件设置适当的 defaultValue;例如:

<xp:inputHidden value="#{comment.cm_By}" defaultValue="#{context.user.distinguishedName}" />

然后您可以将对话框字段绑定到该数据源:

<xp:inputTextarea id="comments" style="width:100%;height:100px" value="#{comment.cm_Comment"}>

所以你的提交按钮可以变成一个“保存文档”的简单动作和一行的“执行脚本”:

<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action>
        <xp:actionGroup>
            <xp:actionGroup>
                <xp:saveDocument var="comment" />
                <xp:executeScript>
                    <xp:this.script><![CDATA[#{javascript:getComponent("commentsDialog").hide();}]]></xp:this.script>
                </xp:executeScript>
            </xp:actionGroup>
        </xp:actionGroup>
    </xp:this.action>
</xp:eventHandler>

如果评论数据源的范围是每个请求,那么每次都会创建一个新文档。您无需以编程方式创建文档...让数据源为您管理。

于 2013-03-03T00:42:33.630 回答