2016-08-16 10 views
0

私のページにp:pollがあります。ページがブラウザに読み込まれているときは、開始ボタンをクリックした後、統計情報を表示してカウンタを表示する必要があります。私の問題は、ユーザーが別のページに移動するときに、「ページ1に移動」をクリックすることによって開始されます。ポーリング時間ティックはナビゲートした後に停止するためです。あなたが戻ったときに、あなたはカウンターを再起動するためにボタンをもう一度クリックする必要があります。別のページに移動した後、投票を止める方法を教えてください。どのような状況でもp:pollを続行します。私はprimefacesとApache myfacesを使用しています。これは、ページングする必要があるサンプルです。 1ページには2つのボタンがあります。 Beginボタンをクリックすると、数字が表示されます。 「ページ1に移動」ボタンをクリックすると、ページがone.xhtmlに変更されます。 1つ目のページで[インデックスページに移動]をクリックした後、ページをindex.xhtmlページに変更します。これが出入りした後、あなたはカウンターが止まっているのを見るでしょう。 「Begin(開始)」ボタンを再度クリックすると、カウンタの開始が再び列挙されます。私のゴールは、ユーザーが各ページをナビゲートし、カウンターを止めずに停止するときです。ご回答いただきありがとうございます。ブラウザで別のページに移動した後、p:pollを停止しないようにする方法

これいるindex.xhtmlページ:

<?xml version="1.0" encoding="UTF-8"?> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml" 
 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
 
     xmlns:p="http://primefaces.org/ui"> 
 

 
<h:head> 
 
    <title>Home Page</title> 
 
</h:head> 
 

 
<h:body> 
 

 
    <h:form id="mainForm"> 
 

 
     <p:panelGrid id="pnl" columns="3" rendered="true" columnClasses="ui-column-p-2"> 
 

 
      <p:outputLabel id="lblMessage" value="#{test.count}"/> 
 
      <p:commandButton id="btnStart" value="Begin" onclick="PF('poll').start();"/> 
 
      <p:commandButton id="btnTest" actionListener="#{test.gotoOne}" value="Go To Page One"/> 
 

 
     </p:panelGrid> 
 

 
     <p:poll id="poll" autoStart="false" listener="#{test.counter}" 
 
       update="mainForm:lblMessage" widgetVar="poll"/> 
 
    </h:form> 
 

 
</h:body> 
 

 
</html>
そして、これはone.xhtmlページ:

<?xml version="1.0" encoding="UTF-8"?> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml" 
 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
 
     xmlns:p="http://primefaces.org/ui"> 
 

 
<h:head> 
 
    <title>Home Page</title> 
 
</h:head> 
 

 
<h:body> 
 

 
    <h:form> 
 
     <p:commandButton id="pn" actionListener="#{test.gotoIndex}" value="Go To Page Index"/> 
 
    </h:form> 
 

 
</h:body> 
 

 
</html>

は、最後にこれが私のBeanです、th数字を生成するとき:

package bean; 


import org.primefaces.context.RequestContext; 

import javax.faces.bean.ApplicationScoped; 
import javax.faces.bean.ManagedBean; 
import javax.faces.context.FacesContext; 
import java.io.IOException; 

@ManagedBean 
@ApplicationScoped 
public class Test { 

    private int count; 

    public void counter() { 
     count++; 
     System.out.println("count = " + count); 
    } 

    public void gotoIndex() { 
     try { 
      FacesContext.getCurrentInstance().getExternalContext().redirect("index.xhtml"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void gotoOne() { 
     try { 
      FacesContext.getCurrentInstance().getExternalContext().redirect("one.xhtml"); 
      RequestContext.getCurrentInstance().execute("PF('poll').start();"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    public int getCount() { 
     return count; 
    } 

    public void setCount(int count) { 
     this.count = count; 
    } 
} 
+0

すべてのページに挿入しますか?またはメインテンプレート内。他のオプションはありません( 'old' html の構造を使用しない限り)。投票を使用せずにプッシュする方が良いですが、それでもすべてのページまたはテンプレートに配置する必要があります。 – Kukeltje

+0

これは、ページの読み込み時に、ロゴ/会社/バナーイメージを表示しますが、使用がナビゲートすると表示されます。ユーザーがどのページをナビゲートするかはわかりません。ソリューション:すべてのページに表示します。より良い解決策:それをテンプレートに入れる。 – Kukeltje

+0

ありがとうございます。あなたの提案は実用的ではありません。このページには折れ線グラフのコンポーネントがあります。バックエンドでは、1秒ごとにメソッドが実行され、折れ線グラフで表示される新しいポイントが生成されます。このメソッドはスレッドを開始するp:pollによって実行されます。ユーザーが別のページに移動したときp:ポーリングスレッドが停止します。このページにまだいるユーザーのタイムティックを続行する必要があります。 – Ramin

答えて

0

最後に私は解決策を見つけました。 p:pollの代わりにtime schedulerを使用しています。 Quartz Timeスケジューラ、Spring Framework Time Scheduler、またはEJB Time Schedulerを使用できます。

+1

申し訳ありませんが、これは答えではありません。 'p:poll'は(クライアント側の)uiコンポーネントであり、ejbスケジューラーはサーバー側のコンポーネントです。 – Kukeltje

+0

実際に私の間違いは、クライアント側のスレッドを使用していたということです。 p:pollのように。サーバーサイドタイムスケジューラーを使用しているときは、どのクライアントにも依存しません。だからクライアント側のイベントは、私のタイマーを停止することができます。私のツールとフレームワークは次のとおりです。WildFly 10.1.0、関連するEJBとMojarra、Primefaces 6.1。 – Ramin

関連する問題