Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpages 我是否可以(或应该)对多个视图控件使用一个视图_Xpages - Fatal编程技术网

Xpages 我是否可以(或应该)对多个视图控件使用一个视图

Xpages 我是否可以(或应该)对多个视图控件使用一个视图,xpages,Xpages,在传统的Notes编程中,最好使用隐藏视图进行数据库查找,而使用非隐藏视图进行面向用户的视图。这样,您就不会收到用户向视图添加字段并中断查找的请求。保持表示与逻辑分离 我在Xpages中仍然遵循这一点。但我想知道我们是否可以(或者应该)将用于数据源的隐藏视图重用到多个表示视图中。换句话说,视图和视图类型控件之间应该存在一对一的对应关系。多对一的关系有限制吗?我认为在XPages的世界里。。。假设它是100%的XPages应用程序,那么使用视图作为“表示”的需要就少多了。因为您可以更改视图中的内容

在传统的Notes编程中,最好使用隐藏视图进行数据库查找,而使用非隐藏视图进行面向用户的视图。这样,您就不会收到用户向视图添加字段并中断查找的请求。保持表示与逻辑分离


我在Xpages中仍然遵循这一点。但我想知道我们是否可以(或者应该)将用于数据源的隐藏视图重用到多个表示视图中。换句话说,视图和视图类型控件之间应该存在一对一的对应关系。多对一的关系有限制吗?

我认为在XPages的世界里。。。假设它是100%的XPages应用程序,那么使用视图作为“表示”的需要就少多了。因为您可以更改视图中的内容并重复演示文稿的控件

因此,您可能最终拥有一个包含更多字段的视图,但这会提供多个视图控件,您只需显示感兴趣的列等。问题在于,您是否要使用视图控件对列进行排序以及其他所有操作。实际上,我很少使用视图控件。我觉得它太狭隘了。我更喜欢重复控制

所以,为了回答您的问题,我认为您绝对应该尽可能多次地重用视图。从性能角度来看,我通常认为视图越少越好


这些天来,我对整体视图的处理较少。我制作Java对象来表示我的文档。因此,我将使用一些视图来查找正确的文档,然后将它们推送到java对象中。然后在Java中,我将使用代码以不同的方式对事物进行排序,并将其发送回repeat控件。效果很好,这让我减少了浏览量。但是如果你用3000多个文档来做这件事。。。初始注入可能会有一些延迟,因此在某些情况下,我可能不得不重新实际接触视图,以获得更好的性能。

在XPages应用程序中,视图设计元素和视图面板控件之间不需要保持一对一的关系,当然也不应该

考虑一个只有一个表单设计元素和许多视图设计元素的传统Notes客户端应用程序。当您的主要/唯一演示工具是表单和视图元素时,您往往会获得大量视图以满足应用程序的各种演示需求。当然,每个添加的视图都会生成一个索引,从而增加应用程序的大小并降低性能

XPages的一个重要特性是数据和表示层的分离。这允许您在多个具有不同表示要求的XPage上重用相同的Domino视图数据源——每个XPage显示不同的列集或使用不同的迭代器控件来显示视图数据(xp:viewPanel、xp:repeat、xp:dataTable、xe:dataView、xe:dynamicViewPanel或xe:djxDataGrid)

当我开发一个没有传统Notes客户端访问的新XPages应用程序时,我发现我倾向于创建更少、更平坦、更宽的视图(即更多的列)

我得到了更多列的更广泛的视图,因为在底层文档中返回列值比返回字段值更有效。所有迭代器控件都有一个var变量来处理Domino视图数据源中的条目,甚至可以通过REST服务处理xe:djxDataGrid。使用Domino视图数据源时,我倾向于设置var=“viewEntry”以反映其NotesXspViewEntry类型

因此,当我需要返回的字段值没有列时(比如视图列中的计算字段或迭代器控件的另一个方面),我必须从底层文档中获取它,如下所示:

<xp:text escape="true" id="computedField3">
    <xp:this.value><![CDATA[#{javascript:
       return viewEntry.getDocument().getItemValueString("City") + ", " +     viewEntry.getDocument().getItemValueString("State");
    }]]></xp:this.value>
</xp:text>

但是,如果我只是将城市和州列添加到Domino View数据源的视图设计中,那么以下代码运行得更快:

<xp:text escape="true" id="computedField2">
        <xp:this.value><![CDATA[#{javascript:
            return viewEntry.getColumnValue("City") + ", " + viewEntry.getColumnValue("State");
        }]]></xp:this.value>
</xp:text>

更快的速度是EL的等价物:

<xp:text escape="true" id="computedField1"
        value="#{viewEntry.City}, #{viewEntry.State}">
</xp:text>


由于我在XPages代码中按编程名称而不是位置来处理视图列,因此在需要时向视图设计中添加新列似乎不会破坏任何东西(至少目前还没有)。

+1大卫关于使用重复的评论。我最近更进一步,创建了一个repeat控件,用于显示多个视图,所需的视图/列信息存储在配置文档中。这种方法可以更轻松地进行视图更改,而不必始终接触设计。它还打开了一扇门,允许用户轻松选择他们想要查看的列,并将这些首选项存储在单独的配置文档中。不要依赖UI视图。添加更多列没有问题(@paul提到了列的顺序,这绝对打破了经典的
@DbLookups
)。用户驱动的定制的主要问题是删除列或更改值格式。