XPage数据表和寻呼机问题

时间:2013-04-29 20:14:42

标签: datatable xpages

在我的XPage上,我有一系列搜索过滤器(State,First Name和Last Name)。搜索按钮会触发绑定到受管Bean的数据表的填充。

数据表最初会填充数据行。但是,当我单击Next(在寻呼机中),而不是加载接下来的5行时,它不再返回数据。我知道数据表正在获得正确的行数,因为如果我将数据表中的重复限制更改为10,它们都会显示。此外,寻呼机中的页数为2(这是正确的数字)。

任何可能导致此问题的想法?

谢谢,

数据表的代码:

    <xp:dataTable rows="5" id="studentTable" var="currentStudent"
        style="width:400.0px" value="#{studentlist.students}">
        <xp:column id="firstnameColumn" style="font-weight:bold">
            <xp:this.facets>
                <xp:span xp:key="header">
                    <xp:span style="font-weight:bold">
                        First Name
                    </xp:span>
                </xp:span>
            </xp:this.facets>
            <xp:text escape="true" id="firstnameField"
                value="#{currentStudent.firstname}">
            </xp:text>
        </xp:column>
        <xp:column id="column1">
            <xp:text escape="true" id="middleinitialField"
                value="#{currentStudent.middleName}">
            </xp:text>
            <xp:this.facets>
                <xp:span xp:key="header">
                    <xp:span style="font-weight:bold">
                        Middle Name
                    </xp:span>
                </xp:span>
            </xp:this.facets>
        </xp:column>
        <xp:column id="lastnameColumn" style="font-weight:bold">
            <xp:this.facets>
                <xp:span xp:key="header">
                    <xp:span style="font-weight:bold">
                        Last Name
                    </xp:span>
                </xp:span>
            </xp:this.facets>
            <xp:text escape="true" id="lastnameField"
                value="#{currentStudent.lastname}">
            </xp:text>
        </xp:column>
        <xp:column id="idColumn">
            <xp:this.facets>
                <xp:span xp:key="header">
                    <xp:span style="font-weight:bold">ID</xp:span>
                </xp:span>
            </xp:this.facets>               
            <xp:text escape="true" id="computedField1"
                value="#{currentStudent.id}">
            </xp:text>
        </xp:column>
        <xp:this.facets>
            <xp:pager layout="Previous Group Next" xp:key="header"
                id="pager1" for="studentTable" partialRefresh="true">
            </xp:pager>
        </xp:this.facets></xp:dataTable>

按钮后面的代码:

    var state=getComponentValue('state');
    var firstName=document1.getItemValueString("firstName");
    var lastName=document1.getItemValueString("lastName");
    if(state == "--" || firstName == "" || lastName == "")
    {
    //do nothing
    }
    else{
    studentlist.setConnDB("jdbc:sqlserver://XX.XX.X.XX:1433;DatabaseName=dan_test");
    studentlist.setConnUserName("test");
    studentlist.setConnPassword("Password1");
    studentlist.setSQLQuery("SELECT FirstName,MiddleName,LastName,ID FROM TestStudents        WHERE FirstName Like '"+firstName+"%' AND LastName Like '"+lastName+"%' AND State = '"+state+"' ORDER BY LastName ASC");

2 个答案:

答案 0 :(得分:1)

我在这里做了一些假设而没有看到你的MBean代码,但是希望尽可能指出你正确的方向......

确保在调用 getStudents()调用期间恢复studenLists bean中的datamodel。我看到你在上面的XSP片段中有 value =“#{studentlist.students}” ...应该映射到返回a的bean上的 getStudents()方法学生对象的 DataModel 等......大概是的?所以,在这里要牢记几件事......确保bean至少在 viewScope (最好)并且你在getStudents()方法中“恢复包装数据”基于a 非瞬态缓冲区(例如:持有当前过滤的“学生”对象集的ArrayList)并确保Student对象的缓冲区是可序列化的 - 对于“磁盘持久性”至关重要!

如果使用这种方法,寻呼机将始终针对针对当前视图发布的每个后续分页请求针对最新恢复的数据模型进行“分页” - 页面索引等由DataModel对象内部管理。 / p>

例如:

1。没有恢复:


    ...
    private transient DataModel studentSearchResults;
    private transient List searchResults;
    ...
    public DataModel getStudents() {
        if (null == studentSearchResults) {
            studentSearchResults = new ListDataModel();
        }
        return studentSearchResults;
    }

2。恢复时间:


    ...
    private transient DataModel studentSearchResults;
    private List searchResults;
    ...
    public DataModel getStudents() {
        if (null == studentSearchResults) {
            studentSearchResults= new ListDataModel();
            if(null != searchResults){
                studentSearchResults.setWrappedData(searchResults);
            }
        }
        return studentSearchResults;
    }

答案 1 :(得分:0)

如果添加另一个仅部分刷新dataTable的按钮,您是否也会丢失数据?这应该确定托管bean属性是否被重置(在这种情况下dataTable的内容将消失)或者分页问题(在这种情况下他们不会)。