XPage中的动态子类别(动态视图面板控件)

时间:2013-07-16 13:05:25

标签: view panel xpages

系统信息:
    测试服务器:
    Windows 7上的多米诺骨牌9     扩展库版本900v00_02.20130515-2200
    开发服务器:
    Windows服务器2008上的多米诺骨牌8.5.3 FP3     扩展库版本853.20121022-1354
    发展客户
    Notes 8.5.3 Windows 7上的FP3
    扩展库版本853.20121022-1354
    浏览器使用
    IE8 *,IE9
    火狐
    铬
    * =项目定义的浏览器

问题:
开发了一个门户应用程序,以便最终用户从选择(从组合框)中选择所需的数据库并显示该数据库。此门户中显示的所有数据库都使用相同的设计模板,但配置非常高。为了保持纤薄的设计,并防止需要无数隐藏的视图面板,使用了扩展库动态视图面板控件。
我目前遇到的部分问题是在第一列或第二列中使用\字符以创建子类别。目前还不知道这个角色使用了多少次,也不知道有多少个子类别。使用普通的Notes客户端,这不是问题,因为视图将始终正确显示。使用xe:dynamicViewPanel或xp:viewPanel控件并非如此。它们不是缩进新的子类别,而是直接显示在彼此之下。但是,关闭主类别将关闭子类别。我还测试过,看看这是一个在新的notes / domino 9环境中得到纠正的bug,但是,它仍然存在。

问题:
有没有人知道如何修复显示这些类别/子类别的问题,或者可能是另一种显示信息的方式,使其看起来像背景视图?如果可以的话,我宁愿留在动态视图面板上。

提前谢谢你 格雷格

1 个答案:

答案 0 :(得分:3)

不为网络构建分类视图。我将使用视图导航器创建一个bean,并用列表/树组合替换视图。有some UI inspirations可以查看。在您的bean中,您可以根据自己的喜好处理视图。

偏离我的脑袋(可能无法编译):

public class SampleClass {

private final Map<String,List<List<String>>> viewData = new HashMap<String,List<List<String>>>();

// it isn't a MANAGED bean since in the constructor
// there's a parameter - use it in a ObjectDataSource or a datacontext
public SampleClass (lotus.domino.ViewNavigator vn) {

    try {
        ViewEntry ve = vn.getFirst();
        while (ve != null) {
            ViewEntry veNext = vn.getNextSibling(ve);
            this.createCategoryAndEntries(ve);
                            ve.recycle();
            ve = veNext;
        }
    } catch (NotesException e) {
        e.PrintStacktrace();
    }
}

private void(createCategoryAndEntries(ViewEntry ve) {
   String cateogry = ve.getColumnValues()[0]; // You might need more columns
   List<List<String>> catMembers = new ArrayList<List<String>>();
   int subEntryCount = ve.getChildCount();
   // If that's bigger than 0 get the children, each makes a list entry
   // containing a list with all the column values
   this.viewData.put(category,catMembers);

}   

public Collection<String> getKeys() {
    return this.viewData.keySet();
}

public List<List<String>> getEntries(String category) {
    return this.viewData.get(category);
  } 
}

您将使用getKeys()填充您的dojo树 - 您需要自己处理子类别中的拆分。诀窍是将树中的类别显示为拆分值,但返回单个字符串(因为它实际存储在文档中)然后可以将数据表或重复控件绑定到getEntries(...)并将列绑定到个人参赛作品