私はJSFにかなり慣れていないので、助けてくれる人が必要です。ページに進行状況バーを実装しようとしているので、この例に従いました; それは十分に明らかですが、私の問題は、「値」属性の値がBean(CLASS_A)では計算されず、それから呼び出されるユーティリティクラス(CLASS_B)で計算されることです。このコンテキストでは、CLASS_A に "accomplishedPercentage" 変数を作成し、CLASS_B から更新して、xhtml ページで使用できるようにしましたが、更新されていません。また、ProgressBarBean クラス (@ManagedBean および @SessionScoped でアノテーションを付けたもの) を作成し、メソッドを呼び出して CLASS_B からの進行状況を計算しようとしましたが、ProgressBarBean を常に null として取得する理由がわかりません (@ で注入しています)管理プロパティ)。誰かが私を助けることができますか?いくつかの例または私が間違っていることを教えてください。前もって感謝します。
コードの一部:
これはビューの進行状況バーです:
<rich:progressBar value="#{progressBar.accomplishedPercentage}"
interval="2000" label="#{progressBar.accomplishedPercentage} %"
enabled="#{oaBean.showProgressBar}" minValue="-1" maxValue="100"
reRenderAfterComplete="createFormPanel">
</rich:progressBar>
ProgressBarBean
@ManagedBean(name="progressBar")
@SessionScoped
public class ProgressBarBean implements Serializable {
private static final long serialVersionUID = 1L;
private Long accomplishedPercentage;
@PostConstruct
public void init() {
accomplishedPercentage = 0L;
}
public void incrementAccomplishedPercentage (Long inc) {
this.setAccomplishedPercentage(this.getAccomplishedPercentage() + inc);
}
//getter and setter for accomplishedPercentage
}
その後、進行状況バーがメソッドを介して CLASS_B に注入され@ManagedProperty(value="#{progressBar}")
private ProgressBarBean progressBar;
、メソッドが呼び出されますが、前述のように、null 値をincrementAccomplishedPercentage
取得しています。progressBar
EDIT 1
現在、ProgressBarBean のインスタンスを受け取っていますが、問題は、UI のプログレス バーの値が更新されないことです。メソッドgetAccomplishedPercentage
は、ページをロードするときにのみ呼び出されます (したがって、常に 0 です)。 2秒ごとに処理します。
プログレスバー自体は、それを開始するボタンとは関係がないと思います。プログレスバーの完全な定義は次のとおりです。
<p:dialog modal="true" widgetVar="statusDialog" header="Status"
draggable="false" closable="false" resizable="false">
<rich:progressBar value="#{oaBean.accomplishedPercentage}"
interval="1000" label="#{oaBean.accomplishedPercentage} %"
enabled="#{oaBean.showProgressBar}" minValue="-1" maxValue="100"
reRenderAfterComplete="createFormPanel">
</rich:progressBar>
</p:dialog>
そして、これはコマンド ボタンの定義です。
<p:commandButton id="generate" value="Generate"
oncomplete="generateDialogDocumento.hide() onclick="PrimeFaces.monitorDownload(start, stop)"
icon="ui-icon-arrowthichk-s" ajax="false">
<p:fileDownload value="#{oaBean.file}" />
</p:commandButton>
両方のコントロールをリンクしようとしましたが、リンクできませんでした。
よろしく
EDIT 2
@Andyの提案に基づいて、進行状況バーをprimefacesに変更しましたが、この場合、進行状況が表示されません(0でさえありません)。これは、commandButton のコードです。
<p:commandButton id="generate" value="Generate"
oncomplete="generateDialogDocumento.hide()" onclick="PrimeFaces.monitorDownload(start, stop); statusDialog.show();"
icon="ui-icon-arrowthichk-s" ajax="false">
<p:dialog modal="false" widgetVar="statusDialog" header="Status"
draggable="false" closable="false" resizable="false">
<p:growl id="growl" />
<p:progressBar widgetVar="pbAjax" ajax="true" value="#{progressBar.accomplishedPercentage}" labelTemplate="#{progressBar.accomplishedPercentage}%" >
<p:ajax event="complete" listener="#{progressBar.onComplete}" update="growl" oncomplete="statusDialog.hide()"/>
</p:progressBar>
</p:dialog>
<p:fileDownload value="#{oaBean.file}" />