0

この投稿では、優れた BalusC が <c:forEach> を使用してビルド時にパラメーターを取得することを指摘しました。

コード

フォームの別の部分に基づいて可変量のパラメーター (<f:param> 要素) を使用した、より複雑なバージョンがあります。フォームの上部には、考えられるすべての「基準」の DataTable があります。下部には、使用されている基準のみを含む、これらの基準での選択に基づいた内容の PrimeFaces グラフィック画像があります。

<p:dataTable var='criterion' value='#{criteria}'
    binding="#{searchBean.criteriaList}" id="#{id}">
  ... each row shows a criteria, which has a parameter name, an operator, and a value ...
  ... each row may be set or not set ...
</p:dataTable>

<p:graphicImage value="#{searchBean.lineChartImage}">
  <c:forEach var="criteriaName" items="#{searchBean.usedCriteriaKeys}">
    <f:param name="#{criteriaName}" value="#{searchBean.criteriaMap[criteriaName]}"/>
  </c:forEach>
</p:graphicImage>

バックグラウンド

パラメータが設定されている限り、 searchBean.lineChartImage メソッドが正しいチャートを提供してくれることはわかっています。

SearchBean は RequestScope Bean です。

JSF 2.1、Tomcat 7.0.22、および Primefaces 2.2.1 を使用しています。

問題

条件を選択/有効にすると (たとえば、param="eventDate"、operator="after"、value="2011-10-01")、ライフサイクルの早い段階で、RestoreView フェーズのツリー作成時に、graphicImage のパラメーターが作成されます。 ; 私が実際に必要とするパラメーターのセットは、UpdateModelValues フェーズまで更新されません。

ポストバック自体の実際の結果に基づいて p:graphicImage の一連のパラメーターを取得する方法はありますか?

4

1 に答える 1

0

私はあなたの問題を見ます。ただし、ビュー側の明確な解決策は実際にはわかりません。最善の策は、これらのパラメーターを#{searchBean.lineChartImage}Bean のアクション メソッドの背後にあるプロパティに自分で追加することです。

this.lineChartImage = imageURL + "?" + toQueryString(criteriaMap);

このユーティリティメソッドで

public static String toQueryString(Map<String, String> params) {
    StringBuilder queryString = new StringBuilder();

    for (Entry<String, String> param : params.entrySet()) {
        if (queryString.length() > 0) {
            queryString.append("&amp;");
        }

        queryString
            .append(URLEncoder.encode(param.getKey(), "UTF-8"))
            .append("=")
            .append(URLEncoder.encode(param.getValue(), "UTF-8"));
    }

    return queryString.toString();
}

または多分値として<f:params>受け入れる aが存在する場合、それは可能でした。Map<String, String>Map<String, String[]>

于 2011-10-14T15:53:31.870 に答える