私はJSFの初心者です。私は Primefaces を使用しています。Primefaces で動的なグラフィックを作成したいと考えています。コンテキスト内の URL を介してパラメーターを渡しています。XHTMLには、このコードがあります
<p:graphicImage id="linear" value="#{imageController.chart}">
<f:event type="preRenderView" listener="#{imageController.loadChart}" />
</p:graphicImage>
Bean では、コンストラクター、loadChart、および @PostConstruct メソッドで Web 文字列パラメーターを読み取るコードを配置しましたが、常に同じ結果が得られます。
private StreamedContent chart;
private Integer id = 0;
public ImageController () {
System.out.println("ImageController constructor");
createImgModel();
}
private void createImgModel() {
//Chart
try {
//Get the Id
System.out.println("ImageController.createModel");
Map<String, String> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
if(requestMap.containsKey("id")){
id = Integer.parseInt(requestMap.get("id"));
}
System.out.println("ImageController.id: " + id);
...
}
このメソッドが初めて呼び出されたときは Id パラメータを正しく受け取りましたが、2 回目は 0 を受け取りました。両方が異なるスレッドであることを確認しました。
問題は、1 回目から 2 回目まで ID が削除されるため、ID を保存できないことです。有効な getChart 呼び出しは 2 番目であるため、2 番目に ID を受け取る必要があります。
敬具