2

Hibernate を使用して Struts 2 で Web アプリケーションを開発しています。

しかし、サーバーを起動してWebサイトをロードすると、実行中のロードメソッドが呼び出されるという問題があります。"Phương"しかし、 I get "PH??NG"But in JSP page still displayの代わりに UTF-8 を読み込めません"Phương"。そのため、SQL クエリを実行すると (from Posts WHERE topics like '%PH??NG PHÁP GIÁO D?C TR?%'であるため、データベースにクエリを実行できません。

ここに私のアクションクラス:

public class PostsAction extends ActionSupport {
private List<HomeTopic> homeTopics = new ArrayList<HomeTopic>();
public List<HomeTopic> getHomeTopics() {
    return homeTopics;
}

public void setHomeTopics(List<HomeTopic> homeTopics) {
    this.homeTopics = homeTopics;
}


public void callHomeTopics(){
     Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction trans = session.beginTransaction();
    String[] list = {"NEW – TIN TỨC TRẺ&quot;,"Khu Vui Chơi Cho Trẻ&quot;,"PHƯƠNG PHÁP GIÁO DỤC TRẺ&quot;,"KỸ NĂNG – KINH NGHIỆM","Phòng Bệnh","Tập Tô Màu"};
    for (int i = 0; i < list.length; i++) {
            getTopics(session, trans, list[i]);
        }
trans.commit();
    session.close();
}

public void getTopics(Session session, Transaction trans, String type) {
    String hql = "from Posts WHERE topics like '%" + type + "%'";
    System.out.println("HQL: " + hql);
    Query query = session.createQuery(hql);
    query.setMaxResults(3);
    List<Posts> t = (ArrayList<Posts>) query.list();
    HomeTopic h = new HomeTopic(type, t);
    System.out.println("List topics: " + type + " " + t);
    homeTopics.add(h);
    session.flush();
}

HomeTopics.javaクラス:

 public class HomeTopic {

    private String nameTopic;
    private List<Posts> postList;

    public List<Posts> getPostList() {
        return postList;
    }

    public void setPostList(List<Posts> postList) {
        this.postList = postList;
    }

    public HomeTopic(String nameTopic, List<Posts> postList) {
        this.nameTopic = nameTopic;
        this.postList = postList;
    }

    public HomeTopic() {
    }

    @Override
    public String toString() {
        return "HomeTopic{" + "nameTopic=" + nameTopic + ", postList=" + postList + '}';
    }

    public String getNameTopic() {
        return nameTopic;
    }

    public void setNameTopic(String nameTopic) {
        this.nameTopic = nameTopic;
    }
}

テストするメインメソッドを書くと、まだUTF-8が表示されます。しかし、サーバーを起動してブラウザでメソッドを呼び出すたびにcallHomeTopics()、テキストは"PH??NG PHÁP GIÁO D?C TR?".

しかし、JSPページではまだ表示されます"Phương Pháp Giáo Dục Trẻ&quot;。HQL クエリ以外はすべて問題ありません。

4

3 に答える 3

1

データベースや Web ページから値を読み取るのではなく、値を (テスト目的で、おそらく) ハードコーディングしているため、値をページに挿入するために使用している IDE が動作していることを確認する必要がありますUTF-8

Eclipse で、Window-> Preferences-> General-> Workspace-> Text file encoding-> Other->に移動しUTF-8ます。

これは、コンソールへの出力時にも正しい値を確認するために必要です。

代わりに JSP またはデータベースから値を読み取る場合は、文字エンコーディングに注意し、必ず使用してください。

byte[] utf8Bytes = myString.getBytes("UTF-8");

エンコーディング用、および

String myString = new String(utf8Bytes, "UTF-8")

デコード用。

http://docs.oracle.com/javase/tutorial/i18n/text/string.html

于 2013-03-26T11:30:10.820 に答える
0

文字を JSP の対応するエンコーディングに正しく表示するには、JSPpageディレクティブを使用してcontentTypewith encoding を指定する必要があります。例えば

<%@ page contentType="text/html;charset=UTF-8" %>

これにより、ページ上の文字が UTF-8 エンコーディングで表示されます。

于 2013-03-26T07:10:10.510 に答える
-1

フランス語の文字を直接使用するのではなく、対応する utf コードを使用してください。例えば

use &#233; for é

お役に立てれば

于 2013-03-26T05:52:49.790 に答える