如何在Jett生成的xls中将HashMap传递给forEach标签?

时间:2017-09-11 13:12:07

标签: java collections foreach hashmap jett

我在托管bean中有一个Map

    private Map<FaseProducao, Set<FichaTecnicaOperacao>> fichasTecnicasOperacaoResumo;

对实体FichaTecnica的引用:

public class FichaTecnica{
//...
    private Set<FichaTecnicaOperacao> operacoes;
}

我需要作为参数传递给beans.put()以生成带有jett的xls:

public void createRelatorioFichaTecnica(FichaTecnica fichaTecnica) throws IOException {
    //ommited...
    Map<String, Object> beans = new HashMap<String, Object>();
    beans.put("operacaoResumo", fichasTecnicasOperacaoResumo);

    try (ByteArrayOutputStream saida = new ByteArrayOutputStream();
            InputStream template = this.getClass().getResourceAsStream("/templates/jett/fichaTecnica.xls");
            Workbook workbook = transformer.transform(template, beans);) {
            //ommited...
            }
}

生成xls时会发生异常:

WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (default task-28) #{ProdutoManagedBean.createRelatorioFichaTecnica(row)}: net.sf.jett.exception.AttributeExpressionException: Expected a "java.util.Collection" for "items", got a "java.util.HashMap":  "${operacaoResumo}".

所以我不理解这个错误,因为Map是一个正确的集合?那么为什么不在物品中识别它=&#34; $ {operacaoResumo}&#34;?我根据网站上的链接创建了这个forEach: http://jett.sourceforge.net/tags/forEach.html

1 个答案:

答案 0 :(得分:0)

就像@rgettman所说的那样:

public void createRelatorioFichaTecnica(FichaTecnica fichaTecnica) throws IOException {
    //ommited...
    Map<String, Object> beans = new HashMap<String, Object>();
    beans.put("operacaoResumo", fichasTechicasOperacaoResumo.keySet());

}

谢谢大家!