3

我有 jsf 网页,这需要一些来自以前页面的字符串查询。

我的问题是这个主页似乎有缓存的值,没有变化即使我将这些值更改为 null ,它应该得到 null 页面,但它的值越来越旧。

所以我的问题是:每次我调用它或按 F 按钮时,如何让我的主 jsf 页面重新加载或删除缓存?

我尝试过的 JSF 示例代码:

     <h:head style="width: 200px; ">
    <f:facet name="first">
        <meta http-equiv="X-UA-Compatible" content="edge, chrome=1" />
        <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
    </f:facet>

java类:

String SID = FacesContext.getCurrentInstance().getExternalContext()
        .getRequestParameterMap().get("SID");

String from = FacesContext.getCurrentInstance().getExternalContext()
        .getRequestParameterMap().get("from");

String to = FacesContext.getCurrentInstance().getExternalContext()
        .getRequestParameterMap().get("to");

String class_id = FacesContext.getCurrentInstance()
        .getExternalContext().getRequestParameterMap().get("class_id");


if (SID==null) {
    try {
        Dbconnection NewConnect = new Dbconnection();
        Connection con = NewConnect.MakeConnect();
        Statement stmt = con.createStatement();
        ResultSet rs = stmt
                .executeQuery("SELECT a.course_id, a.teacher_id, a.class_id, a.day_id, a.state, a.apssent_date, a.interval_id,s.student_id,s.first_name FROM student AS s INNER JOIN apsent AS a ON s.student_id = a.student_id where apssent_date between '"
                        + from
                        + "' and '"
                        + to
                        + "' and a.class_id = "
                        + Integer.parseInt(class_id));


        while (rs.next()) {

            ids.add(rs.getInt(8));
            names.add(rs.getString(9));
            intervals.add(rs.getInt(7));
            teachers.add(rs.getInt(2));
            dates.add(rs.getString(6));
            state.add(rs.getString(5));
        }

    } catch (Exception ex) {

        System.out.println(ex);
    }
}

System.out.println(SID + from + class_id + to);

if (class_id==null) {

    try {
        Dbconnection NewConnect = new Dbconnection();
        Connection con = NewConnect.MakeConnect();
        Statement stmt = con.createStatement();
        ResultSet rs = stmt
                .executeQuery("SELECT a.course_id, a.teacher_id, a.class_id, a.day_id, a.state, a.apssent_date, a.interval_id,s.student_id,s.first_name FROM student AS s INNER JOIN apsent AS a ON s.student_id = a.student_id where apssent_date between '"
                        + from
                        + "' and '"
                        + to
                        + "' and s.student_id = " + SID);

        while (rs.next()) {
            // System.out.println(rs.getInt(1));

            ids.add(rs.getInt(8));
            names.add(rs.getString(9));
            intervals.add(rs.getInt(7));
            teachers.add(rs.getInt(2));
            dates.add(rs.getString(6));
            state.add(rs.getString(5));
        }



    } catch (Exception ex) {

        System.out.println(ex);
    }

}

carsSmall = new ArrayList<Car>();
populateRandomCars(carsSmall, ids.size(), ids, names,
        intervals, teachers, dates, state);

}

4

1 回答 1

7

仅当<meta http-equiv>相关 HTML 文件是从非 HTTP 资源(例如本地磁盘文件系统)打开时(通过file://URI)使用,而不是当相关 HTML 文件是从真实 HTTP 资源(通过http://URI)打开时使用. 相反,使用了通过设置的真实 HTTP 响应标头HttpServletResponse#setHeader()

因此,对于您的 JSF 页面,仅当 JSF 页面在 webbrowser 中打开并且其 HTML 输出由最终用户通过 webbrowser 的File > Save As保存到 HTML 文件中,然后通过双击保存的文件重新打开时,才会解释这些标签在文件资源管理器中。

因此,您的具体问题可能是因为这些<meta http-equiv>标签被忽略而引起的。您需要直接在 HTTP 响应中设置这些标头,而不是在 HTML 标头中。您可以为此使用 servlet 过滤器。在以下“另请参阅”链接中,您可以找到具体的代码示例。

也可以看看:


与具体问题无关,您的 JDBC 代码正在泄漏资源。这是一个严重的问题。您的 JDBC 将在一段时间后停止运行。不要忘记修复它

于 2013-09-14T19:08:24.023 回答