0

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 を実行したときに、更新されたデータを取得できたにもかかわらず、参照されたオブジェクトも閉じるのを忘れていました。私を助けてくれた皆さん、ありがとう:)

4

0 に答える 0