0

这篇文章中,优秀的 BalusC 指出了使用 <c:forEach> 在构建时获取参数。

编码

我有一个更复杂的版本,其中包含基于表单另一部分的可变数量的参数(<f:param> 元素)。表格的顶部有一个包含所有可能“标准”的数据表。底部有一个 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")时,graphicImage 的参数是在生命周期早期在 RestoreView 阶段创建树时创建的; 我真正想要的参数集直到 UpdateModelValues 阶段才更新。

有没有办法根据回发本身的实际结果为 p:graphicImage 获取一组参数?

4

1 回答 1

0

我看到了你的问题。但是,我在视图方面并没有真正看到明确的解决方案。最好的办法是自己将这些参数附加到#{searchBean.lineChartImage}bean 的 action 方法后面的属性中。

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>接受 aMap<String, String>或什Map<String, String[]>至作为值的 a ,那将是可能的。

于 2011-10-14T15:53:31.870 回答