使用NotesViewEntryCollection作为重复控件的数据源 - 需要一个方法来显示标签或计算字段中的值

问题描述 投票:2回答:2

我使用以下作为xpage重复控件的数据源:

var extDB = session.getDatabase("","Position.nsf");
var emailNVCollection:NotesViewEntryCollection = extDB.getView("PrincipalEmails").getAllEntries();
return emailNVCollection

我知道语法是正确的,因为答案:Making a viewEntryCollection an objectDataSource

我无法弄清楚的是如何在计算字段中显示值。我尝试使用表达式语言简单绑定:rowHandle.fieldname。还有几个不同的javascript方法,比如我通过很多搜索找到的rowHandle.getColumnValue。他们都返回各种错误。使用javascript我认为我尝试过的方法对NotesViewEntryCollections无效。表达式语言方法返回:从lotus.domino.local.ViewEntry类型的bean获取属性“fieldname”时出错。

这是实际来源:

<xp:panel style="margin-left:10.0px;margin-top:10.0px">
        <xp:repeat id="repeat1" rows="30" var="rowHandle">
            <xp:this.value><![CDATA[#{javascript:var extDB = session.getDatabase("","Position.nsf");
var emailNVCollection:NotesViewEntryCollection = extDB.getView("PrincipalEmails").getAllEntries();
return emailNVCollection}]]></xp:this.value>
            <xp:text escape="true" id="computedField1"
                value="#{rowHandle.posd_email}">
            </xp:text>
</xp:repeat></xp:panel></:view>

我认为这应该很简单。照常。 ---丽莎 -

javascript xpages xpages-ssjs
2个回答
2
投票

你有一个NotesViewEntryCollection作为重复值。

然后每个rowHandle都是类NotesViewEntry的一个实例。

您可以使用getDocument()访问文档的项目。

rowHandle.getDocument().getItemValueString("yourItemName")

你的例子就是

    <xp:text escape="true" id="computedField1"
        value="#{javascript: rowHandle.getDocument().getItemValueString('posd_email')>
    </xp:text>

如果你像本例中的第一列一样使用view's column values,你会获得更好的性能:

rowHandle.getColumnValues().firstElement().toString()

0
投票

你不会想那样做。除了违背MVC范例之外,你还在呼唤性能问题。

虽然仍然以错误的方式摩擦MVC范例,但XPages使您能够摆脱底层数据库对象并与其对应的包装器一起工作(在本例中为ViewEntryDominoViewEntry)。

您必须首先定义数据源(通常在页面开头声明):

<xp:this.data>
    <xp:dominoView var="principalEmails" databaseName="Position.nsf"
        viewName="PrincipalEmails" />
</xp:this.data>

然后在重复控件中引用数据源:

<xp:repeat id="repeatPrincipalEmails" value="#{principalEmails}" var="principalEmail">
    <xp:text value="#{principalEmail.posd_email}" />
</xp:repeat>

只要在点后面定义的值对应于列编程名称 - 如果不涉及公式,该名称将自动匹配字段名称 - 您可以引用视图中存在的任何列。

如果你需要引用视图中没有的任何其他字段,你可以做的最好的事情就是避免访问多米诺骨牌文档对象,而是添加另一个列,你需要的字段

© www.soinside.com 2019 - 2024. All rights reserved.