ただのアイデア!
フィードを含むdbテーブルから、Bean、dao、およびサービスレイヤーを作成すると仮定します。
フィードを取得するページが読み込まれた最初の瞬間に、Java関数からすべてのフィードを取得してから、divにフィードを入力します。
フィードコンテナからフィード数を取得します。次に、カウントをjQuery$.post
を介して、次にサーブレットに渡します。これを実現するには、次のようにします。
例えば:
//Find divs inside the parent div that will contain your feeds
function getCount(){
return $('#feedContainer').children().find('div').size().toString();
}
//Don't forget to pass it to your jQuery post like this
//(Please, continue reading to understand where to put this)
$.post('/servlet', count:getCount(), function(data){ //manage your new feeds });
サーブレットは次のようなものを受け取ります。
例えば:
String count = request.getParameter("count");
これでカウントができたので、検証するか、として解析してInteger
から、Javaでリストを作成します。DBからすべてのフィードを取得する関数があると思います。
例えば:
//Parse it as integer
int feedCountFromUI = Integer.valueOf(count);
//Do a list and call your function to get all feeds from DB.
MyService myService = new MyService();
List<MyBean> feeds = myService.getAll();
//JSON variable
JSONObject result = new JSONObject();
//Fill your JSON variable
for(MyBean mb : feeds) {
//Build a json with your feeds and fill result
}
これで、サーブレットで呼び出されたJSONオブジェクト変数がありresult
、フィード値がfor
上記で入力されているとします。次に、(上からも)として宣言されたリストからカウントを取得しますfeeds
。
int feedCountFromDB = feeds.size();
これで終了間近です。2つのカウントを比較してください。feedCountFromDB
が以上の場合は、feedCountFromUI
ロードする新しいフィードがあることを意味します。
if(feedCountFromDB > feedCountFromUI){
//Send your json variable (result) to your jquery post callback
out.println(result);
} else {
//Means there is nothing new, print 0
out.println(0);
}
この時点で、次のように5秒ごとにフィードコンテナに最後のフィードを入力する必要があります。
(この時点で、jsFiddleからjQueryアニメーション関数を追加することもできます)
setInterval(function(){
$.post('/servlet', count:getCount(), function(data){
//If data has feeds (it's not 0)
if(data != 0) {
var lastFeed = data[data.length - 1];
$('#feedContainer').append('<div>' + lastFeed.title + '<br/>' + lastFeed.description + '</div>';
}
});
}, 5000);
これにより、常にWebインターフェイスからのカウントがチェックされ、5秒ごとにDBからのカウントと比較されて、新しいフィードが取得されます。
お役に立てれば :-)