【问题标题】:refresh a data in a datatable on the screen(jsp)在屏幕上刷新数据表中的数据(jsp)
【发布时间】:2011-08-22 06:09:59
【问题描述】:

我的 jsp 中有一个数据表,它从数据库中获取数据。我在数据表的每一行中都包含了一个链接,单击该链接会转到另一个 jsp(history.jsp),并采用 2 个输入参数。

Student.jsp

<h:dataTable id="dt1" value="#{Student.stuList}" var="stuList" >
                    <h:column>
                    <f:facet name="header">
                        <h:outputText value="Student Name"/>
                    </f:facet>
                    <h:outputText value="#{stuList.stuName}"></h:outputText>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Student Number"/>
                    </f:facet>
                    <h:outputText value="#{stuList.stuNum}"></h:outputText>
                </h:column>

                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Student History"/>
                    </f:facet>
                    <h:form>
                        <h:commandLink id = "historyBtn" value="Student History" action="#{stuBean.showHistory}">
                            <f:param name="sName" value="#{stuList.stuName}" />
                            <f:param name="sNumber" value="#{stuList.stuNum}" />
                        </h:commandLink></h:form>
                </h:column>
            </h:dataTable>

history.jsp

<h:dataTable id="dt2" value="#{StuHistory.stuHistory}" var="stuHistory" >

                <h:column>
                    <f:facet name="header">
                        <h:outputText style=""value="Marks in test1" />
                    </f:facet>
                    <h:outputText style="" value="#{stuHistory.test1}" ></h:outputText>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Marks in test2"/>
                    </f:facet>
                    <h:outputText value="#{stuHistory.test2}" ></h:outputText>
                </h:column>
              </h:dataTable>
             <h:form>
           <h:commandButton id = "backBtn" value="Back to StuList" action="#{stuBean.backToStuList}">
             </h:commandButton> </h:form>

学生豆

public String backToStuList() {
    return "stuList";
}

public String showHistory() {
    sHistory.getStuHistory();
    return "stuHistory";
}

StudentHistory.java(动作类)

private List stuHistory = new ArrayList();
String sNum;
String sName;

public List getStuHistory() {
    getStuHistoryFromDb(sNum, sName);
    return stuHistory;
}    

faces-config.xml

<managed-bean>
    <managed-bean-name>stuBean</managed-bean-name>
    <managed-bean-class>
        com.klit.bean.StudentBean
    </managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>Student</managed-bean-name>
    <managed-bean-class>
        com.klit.action.Student
    </managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>StuHistory</managed-bean-name>
    <managed-bean-class>
        com.klit.action.StuHistory
    </managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<navigation-rule>
    <from-view-id>Student.jsp</from-view-id>
    <navigation-case>
        <from-action>#{stuBean.showHistory}</from-action>
        <from-outcome>stuHistory</from-outcome>
        <to-view-id>/StudentHistory.jsp</to-view-id>
    </navigation-case>
</navigation-rule>
<navigation-rule>
    <from-view-id>/StudentHistory.jsp</from-view-id>
    <navigation-case>
        <from-action>#{stuBean.backToStuList}</from-action>
        <from-outcome>stuList</from-outcome>
        <to-view-id>/Student.jsp</to-view-id>
    </navigation-case>
</navigation-rule>

我面临的问题是我第一次运行 student.jsp 时它工作正常,但是当我单击历史记录并返回时,数据被附加到现有数据中,即,我现在的列表大小增加了一倍。每次我回来了,同样的问题。 它也与我的 history.jsp 相似,该列表也附加了现有数据。 刷新页面或数据表的任何想法????

【问题讨论】:

    标签: java jsp jsf datatable


    【解决方案1】:

    这听起来像是 bean 中的范围或列表重置问题。

    您必须确保每次切换页面时都重新创建您的 bean 和列表。这可以通过使用视图范围或请求范围 bean 来完成。

    或者,如果您需要会话范围的 bean,您可以在操作方法中重置列表。

    这取决于您的列表是如何填充的。如果您发布您的 bean 中填充列表的部分,我们可以走得更远。

    更新:您必须在 getStuHistoryFromDb 方法中清空您的列表。把它放在方法的开头:

    stuHistory = new ArrayList();
    

    然后您的列表在被填充之前是空的(再次)。对其他列表执行相同操作。

    【讨论】:

    • 我已经将我的托管 bean 也包含在我使用会话范围的地方...我是否必须使其请求范围...???
    • 这取决于您的功能要求。您可以使用会话范围,但必须确保每次要显示列表时都正确重新创建列表(在我的答案中添加了一段)。
    • 重新创建意味着...我该怎么做...需要您的建议
    • 如果您切换页面,您的列表似乎又被填满了。因此,您必须确保您的列表在再次填充之前是空的。您可以在返回“stuList”之前在您的操作方法中添加一行stuList = new ArrayList()。然后你有一个空列表。但这只是一个肮脏的解决方法,而不是真正的解决方案。请张贴您的代码中填写列表的部分。
    • 请找到更新后的代码。这是我的列表,里面填满了数据库数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多