7. 在XPages里怎么实现一次显示分类视图的一个类别
2012-12-04 17:30
281 查看
分类视图是Notes显示文档的独特和强大的功能。在客户端和传统Web开发中,有时会希望一次显示分类视图的一个类别,在这两种环境下,都很容易实现。XPages终于把Notes环境下的web开发现代化了。很多传统web开发中的问题都能够漂亮地解决。那我们就来看看如何在XPages里怎么实现一次显示分类视图的一个类别。
在XPages页面上分别创建一个下拉框和视图控件。下拉框用来切换要显示的类别,它的选项绑定分类视图的折叠起的分类列。视图控件也设置好基本属性。与在经典Notes开发中表单上的嵌入视图类似,视图控件在数据选项卡中也可以设置限制显示分类视图的某个类别。这时最直观的想法是将这个属性设置为下拉框的值。显示这个页面,在计算视图要显示的分类,即下拉框的值时出现错误。这可以推测理解为XPages引擎先解析页面上的数据源,即那个视图。在计算它的显示分类属性时,下拉框控件还没有准备好。
那我们就换一个思路,在下拉框的更换选项事件中,指定视图要显示的分类。在刚才的试验中,我们可以在视图数据源的属性中看到一个categoryFilter项,而view1又是XPages为这个视图数据源创建的服务器端JavaScript可以访问的全局对象,于是很自然地,我们就想到view1.setCategoryFilter()。奇怪的是,view1竟然没有提供这个方法。Designer为我们自动列出的view1的方法显示它是一个Java的lotus.domino.View接口,而不是作为数据源的XPages类库中的DominoView,DominoViewSource之类的什么东西,就像如果绑定一个文档数据源,document1会是DominoDocument而不是lotus.domino.Document。这一点很有意思,因为视图数据源的var属性,也就是将它作为JavaScript公布的对象名称就是view1,但是XPages引擎却将这个数据源对象隐藏起来,替换为它后端的View。
如此一来,我们想要得到真正的视图数据源对象,就要在脚本中计算页面使用到的数据源,然后再将它类型转换成DominoViewSource之类的什么东西。这又遇到了一个问题,在服务器端JavaScript中,虽然可以调用Java类库的各种方法,但是却不能进行强制类型转换。
这样看来,在传统的Notes开发中很容易实现的一项功能在Xpages中却变得不是那么直接。我们只好再利用一个中间人的角色,在下拉框的事件代码与视图数据源的属性之间增加一座桥梁。我们在下拉框的选项更换事件中将它的值保存到requestScope里,再将视图数据源的categoryFilter属性绑定为这个值。终于大功告成。
在XPages页面上分别创建一个下拉框和视图控件。下拉框用来切换要显示的类别,它的选项绑定分类视图的折叠起的分类列。视图控件也设置好基本属性。与在经典Notes开发中表单上的嵌入视图类似,视图控件在数据选项卡中也可以设置限制显示分类视图的某个类别。这时最直观的想法是将这个属性设置为下拉框的值。显示这个页面,在计算视图要显示的分类,即下拉框的值时出现错误。这可以推测理解为XPages引擎先解析页面上的数据源,即那个视图。在计算它的显示分类属性时,下拉框控件还没有准备好。
那我们就换一个思路,在下拉框的更换选项事件中,指定视图要显示的分类。在刚才的试验中,我们可以在视图数据源的属性中看到一个categoryFilter项,而view1又是XPages为这个视图数据源创建的服务器端JavaScript可以访问的全局对象,于是很自然地,我们就想到view1.setCategoryFilter()。奇怪的是,view1竟然没有提供这个方法。Designer为我们自动列出的view1的方法显示它是一个Java的lotus.domino.View接口,而不是作为数据源的XPages类库中的DominoView,DominoViewSource之类的什么东西,就像如果绑定一个文档数据源,document1会是DominoDocument而不是lotus.domino.Document。这一点很有意思,因为视图数据源的var属性,也就是将它作为JavaScript公布的对象名称就是view1,但是XPages引擎却将这个数据源对象隐藏起来,替换为它后端的View。
如此一来,我们想要得到真正的视图数据源对象,就要在脚本中计算页面使用到的数据源,然后再将它类型转换成DominoViewSource之类的什么东西。这又遇到了一个问题,在服务器端JavaScript中,虽然可以调用Java类库的各种方法,但是却不能进行强制类型转换。
这样看来,在传统的Notes开发中很容易实现的一项功能在Xpages中却变得不是那么直接。我们只好再利用一个中间人的角色,在下拉框的事件代码与视图数据源的属性之间增加一座桥梁。我们在下拉框的选项更换事件中将它的值保存到requestScope里,再将视图数据源的categoryFilter属性绑定为这个值。终于大功告成。
<xp:panel> <xp:comboBox id="Status" > <xp:selectItem itemLabel="All" itemValue="All"></xp:selectItem> <xp:selectItems> <xp:this.value><![CDATA[#{javascript:view1.getColumnValues(0);}]]></xp:this.value> </xp:selectItems> <xp:eventHandler event="onchange" submit="true" refreshMode="complete"> <xp:this.action><![CDATA[#{javascript:var status:com.ibm.xsp.component.xp.XspSelectOneMenu = getComponent("Status"); viewScope.put("category", status.getValue());}]]></xp:this.action> </xp:eventHandler> </xp:comboBox> </xp:panel> <xp:viewPanel rows="15" value="#{view1}" id="viewPanel1" viewStyle="width:100%" target="_blank" pageName="/PO.xsp"> <xp:this.facets> <xp:pager partialRefresh="true" layout="Previous Group Next" xp:key="headerPager" id="pager1"> </xp:pager> </xp:this.facets> <xp:viewColumn columnName="Status" id="viewColumn1"> <xp:viewColumnHeader value="Status" id="viewColumnHeader1"> </xp:viewColumnHeader> </xp:viewColumn> <xp:viewColumn columnName="No" id="viewColumn2"> <xp:viewColumnHeader value="No." id="viewColumnHeader2"></xp:viewColumnHeader> </xp:viewColumn> <xp:viewColumn columnName="AppDate" id="viewColumn3" displayAs="link"> <xp:this.converter> <xp:convertDateTime type="date"></xp:convertDateTime> </xp:this.converter> <xp:viewColumnHeader value="Creation Date" id="viewColumnHeader3"> </xp:viewColumnHeader> </xp:viewColumn> <xp:viewColumn columnName="$5" id="viewColumn4"> <xp:viewColumnHeader value="Handled By" id="viewColumnHeader4"> </xp:viewColumnHeader> </xp:viewColumn> <xp:viewColumn columnName="Department" id="viewColumn5"> <xp:viewColumnHeader value="Department" id="viewColumnHeader5"> </xp:viewColumnHeader> </xp:viewColumn> <xp:viewColumn columnName="Item" id="viewColumn6"> <xp:viewColumnHeader value="Item" id="viewColumnHeader6"></xp:viewColumnHeader> </xp:viewColumn> <xp:viewColumn columnName="TotalPrice" id="viewColumn7"> <xp:viewColumnHeader value="Total Price" id="viewColumnHeader7"> </xp:viewColumnHeader> </xp:viewColumn> </xp:viewPanel> <xp:this.data> <xp:dominoView var="view1" viewName="vwPurchasing" expandLevel="1"> <xp:this.categoryFilter><![CDATA[#{javascript:var c=viewScope.get("category"); if (c!="All"){ return c; }}]]></xp:this.categoryFilter> </xp:dominoView> </xp:this.data>最后,还可以在下拉框选项中添加一个“全部分类”选项,在选项更换事件中,如果用户选择的是它,则不保存到requestScope里,这样视图就会显示所有的类别。
相关文章推荐
- 一个窗口里包含一个iframe,点击iframe内的submit按钮,返回的视图总是显示在iframe中,我想要的效果是点击按钮后返回的视图是在浏览器窗口中...?asp.net mvc 的action中,不用js怎么实现??????????
- 一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数,用SQL语句及视图、存储过程分别实现。
- C++ double类型转string类型后,怎么实现小数点后只显示一个数字
- java代码实现商品类别的无限级分类显示
- F:在datagrid中 怎么实现 点击一行(多列)传一个id过去到第二页显示其具体内容,不用按钮、链接等?
- 一个流行且实用的JS表单验证提示,演示了怎么自定义错误信息的显示方式,同时通过写FormValid.showError类方法来实现错误显示方式自定义: errMsg 是一个错误消息的数组,这样方便自定
- C#里怎么实现点击DataGridView里面再显示一个DataGridView
- 设计并实现一个LogService,应用开发时可以打印log到视图(TextView)中显示
- faster rcnn demo.py:在一个窗口显示所有类别标注
- PHP实现显示用户上一次登录时间的方法
- Android实现搜索附近WiFi并显示在视图中
- 设置、删除cookie实现关闭一个层后,即使刷新也不会再显示
- Gallery中,取消惯性滑动,滑动一次只切换一个视图
- 怎么将一个整个文件一次读到内存,然后循环从内存中读取1024字节,写入新的文件(或socket发送出去)
- 【移动适配】一个像素的border怎么实现
- Android中利用ListView和GridView实现列表视图和网格(图标)视图的相互切换显示
- BootStrap点击下拉菜单项后显示一个新的输入框实现代码
- 一定概率选中某一个字母怎么实现 ?
- ASP实现一个空间不同域名访问显示不同版权实例
- 意图分类是怎么实现的