3

私はjsf Webページを持っています。それは前のページからいくつかの文字列クエリを取ります。

私の問題は、このメインページに値がキャッシュされているようで、変更がないことです。これらの値を null に変更しても、null ページを取得するはずですが、古い値が取得されます。

だから私のQは次のとおりです:メインjsfページを呼び出すたびに、または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 ページが Web ブラウザーで開かれ、その HTML 出力がエンドユーザーによって Web ブラウザーの[ファイル] > [名前を付けて保存] を介して HTML ファイルに保存され、保存されたファイルをダブルクリックして再度開かれた場合にのみ解釈されます。ファイルエクスプローラーで。

<meta http-equiv>したがって、これらのタグが無視されるため、具体的な問題が発生する可能性があります。これらのヘッダーは、HTML ヘッドではなく、HTTP 応答に直接設定する必要があります。そのためにサーブレットフィルターを使用できます。次の「関連項目」リンクでは、具体的なコード例を見つけることができます。

以下も参照してください。


具体的な問題とは関係ありませんが、JDBC コードがリソースをリークしています。これは深刻な問題です。JDBC はしばらくすると機能しなくなります。それも忘れずに修正してください

于 2013-09-14T19:08:24.023 に答える