如何将 HashMap 传递给 jett 生成的 xls 中的 forEach 标签?
How to pass HashMap to forEach tag in xls generated by jett?
我在托管 bean 中有一个地图
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 是一个正确的集合?那么为什么 jett 不能在 items = "$ {operacaoResumo}" 中识别它呢?我根据网站上的 link 创建了这个 forEach:
http://jett.sourceforge.net/tags/forEach.html
正如@rgettman 所说,我做到了:
public void createRelatorioFichaTecnica(FichaTecnica fichaTecnica) throws IOException {
//ommited...
Map<String, Object> beans = new HashMap<String, Object>();
beans.put("operacaoResumo", fichasTechicasOperacaoResumo.keySet());
}
谢谢大家!
我在托管 bean 中有一个地图
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 是一个正确的集合?那么为什么 jett 不能在 items = "$ {operacaoResumo}" 中识别它呢?我根据网站上的 link 创建了这个 forEach: http://jett.sourceforge.net/tags/forEach.html
正如@rgettman 所说,我做到了:
public void createRelatorioFichaTecnica(FichaTecnica fichaTecnica) throws IOException {
//ommited...
Map<String, Object> beans = new HashMap<String, Object>();
beans.put("operacaoResumo", fichasTechicasOperacaoResumo.keySet());
}
谢谢大家!