JSF ページに表示したい GPS 情報をアップロードし続けるデータベースがあります。これを定期的に行うために、PrimeFaces の poll 要素を使用していますが、データベースで更新されているにもかかわらず、クエリは同じ値を返し続けます。私はすでに @SessionScope と @RequestScope でそれを試しましたが、これは問題の場所ではないようです。どんな助けでも大歓迎です!以下は、タスクに使用しているコードです。
意見:
<h:form>
<div id="border">
<div id="googleMap">
<p:gmap id="teste" center="#{clientBean.center}" zoom="17" type="HYBRID"
style="width:950px;height:600px"
model="#{clientBean.polylineModel}"
>
</p:gmap>
<p:poll interval="10" listener="#{clientBean.traceRoute()}" update="teste"/>
</div>
</div>
</h:form>
バッキング Bean:
public void traceRoute() {
//....................................................................//
id = "123456";
EntityManagerFactory emf = Persistence.createEntityManagerFactory("TrackMePU");
EntityManager em = emf.createEntityManager();
UserDAO usrDAO = new UserDAO(em);
//....................................................................//
Polyline polyline = new Polyline();
polylineModel = new DefaultMapModel();
//....................................................................//
UserModel usr;
try {
usr = usrDAO.fetchUser(id);
System.out.println("retrieved usr.getCoordinate() = " + usr.getCoordinate());
String rawdata[] = usr.getCoordinate().split("\\]");
//................................................................//
for (String geolocation : rawdata) {
String parts[] = geolocation.split("\\,");
//............................................................//
double lat = Double.parseDouble(parts[0]);
double lng = Double.parseDouble(parts[1]);
LatLng coo = new LatLng (lat, lng);
System.out.println("coo = " + coo);
//............................................................//
polyline.getPaths().add(coo);
center = coo.getLat()+","+coo.getLng();
//polylineModel.addOverlay(new Marker(coo));
//............................................................//
}//end for
polyline.setStrokeWeight(7);
polyline.setStrokeColor("#FF9900");
polyline.setStrokeOpacity(0.7);
//................................................................//
polylineModel.addOverlay(polyline);
//center = usr.getCoordinate();
//................................................................//
} catch (NoResultException e) {
System.out.println("could not find user = "+id);
}//end catch
//....................................................................//
}//end traceRoute method
更新:解決しました。最初から私のせいで、Entity Manager Factory と Entity Manager オブジェクトを閉じるのを忘れていたため、常に同じクエリを取得し続けていました。言及された両方のオブジェクトを閉じると、PrimefacesやJSFとは関係のない問題が解決しました-申し訳ありません。面白いことに、Stand Alone Test Unit を実行したときに、更新されたデータを取得できたにもかかわらず、参照されたオブジェクトも閉じるのを忘れていました。私を助けてくれた皆さん、ありがとう:)