私のページに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>
<?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;
}
}
すべてのページに挿入しますか?またはメインテンプレート内。他のオプションはありません( 'old' html の構造を使用しない限り)。投票を使用せずにプッシュする方が良いですが、それでもすべてのページまたはテンプレートに配置する必要があります。 – Kukeltje
これは、ページの読み込み時に、ロゴ/会社/バナーイメージを表示しますが、使用がナビゲートすると表示されます。ユーザーがどのページをナビゲートするかはわかりません。ソリューション:すべてのページに表示します。より良い解決策:それをテンプレートに入れる。 – Kukeltje
ありがとうございます。あなたの提案は実用的ではありません。このページには折れ線グラフのコンポーネントがあります。バックエンドでは、1秒ごとにメソッドが実行され、折れ線グラフで表示される新しいポイントが生成されます。このメソッドはスレッドを開始するp:pollによって実行されます。ユーザーが別のページに移動したときp:ポーリングスレッドが停止します。このページにまだいるユーザーのタイムティックを続行する必要があります。 – Ramin