在SSJS按钮中,我有一个NotesViewEntryCollection

时间:2014-09-15 20:33:27

标签: xpages xpages-ssjs

by veCol = vw.getAllEntriesByKey(key,false)其中key是来自'form'上控件的值。如果veCol中的计数为零,则返回搜索失败的消息,如果计数为1(一)我设置了一些值并将页面重定向到输入页面,但是,如果计数大于我想要的将veCol显示为重复控件。我想到将viewScope变量设置为veCol,但我看到被告知不会在Scope变量中存储Notes对象,因为它们没有被序列化。 所以我的问题是“有没有办法将我的veCol传递给同一个自定义控件上的重复控件?”实际上控制是一个对话,但这无关紧要。

在另一个例子中,我采用了集合并将其转换为viewScope变量中的UNID数组,然后将repeat绑定到变量。这意味着我必须使用可行的UNID再次获取每个文档,但是veCol已经包含了我需要的所有内容,只是能够通过它会更有效率。所以我知道我可以让它发挥作用但是有相当大的开销。

我的按钮中的代码非常简单我执行var veCol:NotesViewEntryCollection = vw.getAllEntriesByKey(key,false);

在包含按钮的同一对话框中我希望使用返回的值作为veCol重复。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

您可以创建自己的值绑定并覆盖重复的现有值:

<xp:button
    value="Label"
    id="button1">
    <xp:eventHandler
        event="onclick"
        submit="true"
        refreshMode="partial"
        refreshId="repeat1">
        <xp:this.action>
            <![CDATA[#{javascript:
                var valueExpr = "#{javascript:vw.getAllEntriesByKey(key, false);}";
                var value:javax.faces.el.ValueBinding = facesContext.getApplication().createValueBinding(valueExpr);
                var veCol:NotesViewEntryCollection = value.getValue( facesContext );

                if( veCol.getCount() > 0 ){
                    var cmpRepeat:com.ibm.xsp.component.xp.XspDataIterator = getComponent('repeat1');
                    cmpRepeat.setValueBinding( "value", value );
                }else{
                    // do redirect
                }
        }]]></xp:this.action>
    </xp:eventHandler>
</xp:button>

或者只是在按钮中定义一个SSJS变量,并测试该变量是否存在:

<xp:repeat
    id="repeat1"
    rows="30"
    var="doc">
    <xp:this.value>
        <![CDATA[#{javascript:
            if(  typeof( veCol ) != "undefined" ){
                return veCol;
            }
        }]]>
    </xp:this.value>
    <xp:label
        value="#{javascript:if( doc != null ) doc.getUniversalID()}"
        id="label1">
    </xp:label>
</xp:repeat>

答案 1 :(得分:0)

我很想看到一些代码甚至是流程图。

首先,您可以将Viewentrycollection传递给重复控件。我实际上已经问过这个了。 :) How do you pass a NotesDocument / NotesViewEntry Collection into a Custom Control via custom property?

我同意您不想尝试将您的收藏存储在viewScope本身中。在Java世界中,我认为这是相对简单的,但让我们保持非Java,因为这就是你所要求的。

检查这个问题: How to pass variable parameters to an XPages SSJS function?

而不是你的集合的UNIDS的ArrayList,你可以为每个文档创建一个javascript对象,并将字段名称和值放在那里...它有点像JSON在某种程度上......至少我是怎么想的。现在它是“安全的”所以如果你不想将多米诺骨牌对象传递给重复控件本身,你可以把它放在范围内或者返回那个或者其他什么......