Java 如何在velocity模板中准备包含动态数据的表格?

Java 如何在velocity模板中准备包含动态数据的表格?,java,velocity,Java,Velocity,我需要在velocity模板中生成动态表 我在java代码下面准备一个hashmap。输入将来自外部应用程序 public String generateFileFromStringTemplate(HashMap<String, Object> documentContentHashmap, String templateString,TWList list){ System.out.println("hashmap : "+list.getArraySize()

我需要在velocity模板中生成动态表

我在java代码下面准备一个hashmap。输入将来自外部应用程序

public String generateFileFromStringTemplate(HashMap<String, Object> documentContentHashmap, String templateString,TWList list){
         System.out.println("hashmap : "+list.getArraySize());
         TWObject obj=null;
         Map<String, Map<String,String>> mapobj=new HashMap<>();
        try{
          TemplateUtility tutility = new TemplateUtility();
          obj = TWObjectFactory.createObject();
          for (int i = 0; i < list.getArraySize(); i++) {
            obj=(TWObject) list.getUnmodifiableArray().get(i);
            Object[]s=obj.getPropertyNames().toArray();
            Map<String, String> map1=new HashMap<>();
            for (int j = 0; j < obj.getPropertyNames().toArray().length; j++) {
                map1.put(s[j].toString(),(String) obj.getPropertyValue(s[j].toString()));
            }
            mapobj.put("Map"+i, map1);
          }
          documentContentHashmap.put("Map", mapobj);
          StringWriter strWriter = tutility.generateTemplateFromString(documentContentHashmap, templateString);

          String documentBytes = tutility.generateDocsEncodedToBase64Content(strWriter);
          if (documentBytes != null) {
            return documentBytes;
          }
          return null;
        }
        catch (Exception e){
          e.printStackTrace();
          return e.getMessage();
        }
      }
}
下面是我的html,我在其中迭代地图并尝试将上述数据显示为两行,但我无法实现,因此所有数据仅显示在一行中

<html>
<head>
<style type="text/css">

td,th{font-family:Arial, "Helvetica Neue", Helvetica, sans-serif;font-size:12px ;}
.PaymentVoucher{
    font-size:15px;
    text-align:center;
    letter-spacing: 3px;
}
</style>
</head>
<body>
<div>
<table style="width:100%; border: 1px solid #dddddd; font-family: Times New Roman, Times, sans-serif;">
<tr>
    <td  colspan="2">
        <label><b></b></label>
    </td>
    <td style="width:20%;">
    <span>Customer Name : $pvMap.get('customer_name')</span><br/>
    </td>
</tr>
<tr>
    <td style="width:20%;">
    <br />
        <label>Page &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</label><span>1 of 1</span>
    </td>
</tr>
<tr>
    <td colspan="4" class="PaymentVoucher"><b>Loan&nbsp; Details&nbsp;</b></td>
</tr>
<tr>

    <td>
        <label style="width:450px;">Loan Application Date : </label><span>$pvMap.get('application_date')</span>
    </td>
    <td colspan = "3"></td>
</tr>
</table>
<br />
<table  style="width:100%; border: 1px solid #dddddd; font-family: Times New Roman, Times, sans-serif;"> 
  <tr>
        <th>Loan Type</th><th>Loan Amount</th><th>Interest Rate</th><th>Loan Repayment Date</th><th>Tenor</th><th>Proposed Limit</th><th>Approved Limit</th>
  </tr>
  <tr>
    #set($str1="loanType")

    #set($str2="loanAmount")

    #set($str3="interestRate")

    #set($str4="loanRepaymentDate")

    #set($str5="tenor")

    #set($str6="proposedLimit")

    #set($str7="approvedLimit")

    #foreach ($mapEntry in $Map.entrySet())
        #foreach ($map1 in $mapEntry.getValue().entrySet())
            #if($map1.key==$str1)
                <td>$map1.getValue()</td>
            #end
        #end
    #end
    </tr>
</table>
<br />
<br />
<span>Regards,</span><BR/>
<span>Test</span><BR/>
</div>
</body>
</html>

td,th{字体系列:Arial,“Helvetica Neue”,Helvetica,无衬线;字体大小:12px;}
.付款凭单{
字体大小:15px;
文本对齐:居中;
字母间距:3px;
}
客户名称:$pvMap.get('Customer_Name')

页码:第1页,共1页 贷款详情 贷款申请日期:$pvMap.get('Application\u Date')
贷款类型贷款金额利息率贷款还款日期期限提议的限额批准的限额 #set($str1=“loanType”) #设置($str2=“loanAmount”) #设置($str3=“利率”) #设置($str4=“贷款支付日期”) #设置($str5=“期限”) #设置($str6=“建议限额”) #设置($str7=“批准限额”) #foreach($Map.entrySet()中的mapEntry) #foreach($mapEntry.getValue().entrySet()中的map1) #如果($map1.key==$str1) $map1.getValue() #结束 #结束 #结束

问候,
测试

有人能帮忙吗?提前感谢。

尝试将第二个
标记移动到第一个循环中(并使用map getter,而不是循环浏览条目,这就是制作地图的目的):


贷款类型贷款金额利息率贷款还款日期期限提议的限额批准的限额
#设置($columns=[“贷款类型”、“贷款金额”、“利率”、“贷款支付日期”、“期限”、“建议限额”、“批准限额”])
#foreach($Map.values()中的subMap)
#foreach($列中的列)
$subMap.get($column)
#结束
#结束

嗨,克劳德,我们怎样才能绕过这张桌子的角落?边界半径不起作用
{Map0={interestRate=3, tenor=2 sal, proposedLimit=555, loanType=PL, approvedLimit=556, loanAmount=554, loanRepaymentDate=AAJ}, Map1={interestRate=1, tenor=3 sal, proposedLimit=445, loanType=HL, approvedLimit=446, loanAmount=444, loanRepaymentDate=KAL}}
<html>
<head>
<style type="text/css">

td,th{font-family:Arial, "Helvetica Neue", Helvetica, sans-serif;font-size:12px ;}
.PaymentVoucher{
    font-size:15px;
    text-align:center;
    letter-spacing: 3px;
}
</style>
</head>
<body>
<div>
<table style="width:100%; border: 1px solid #dddddd; font-family: Times New Roman, Times, sans-serif;">
<tr>
    <td  colspan="2">
        <label><b></b></label>
    </td>
    <td style="width:20%;">
    <span>Customer Name : $pvMap.get('customer_name')</span><br/>
    </td>
</tr>
<tr>
    <td style="width:20%;">
    <br />
        <label>Page &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</label><span>1 of 1</span>
    </td>
</tr>
<tr>
    <td colspan="4" class="PaymentVoucher"><b>Loan&nbsp; Details&nbsp;</b></td>
</tr>
<tr>

    <td>
        <label style="width:450px;">Loan Application Date : </label><span>$pvMap.get('application_date')</span>
    </td>
    <td colspan = "3"></td>
</tr>
</table>
<br />
<table  style="width:100%; border: 1px solid #dddddd; font-family: Times New Roman, Times, sans-serif;"> 
  <tr>
        <th>Loan Type</th><th>Loan Amount</th><th>Interest Rate</th><th>Loan Repayment Date</th><th>Tenor</th><th>Proposed Limit</th><th>Approved Limit</th>
  </tr>
  <tr>
    #set($str1="loanType")

    #set($str2="loanAmount")

    #set($str3="interestRate")

    #set($str4="loanRepaymentDate")

    #set($str5="tenor")

    #set($str6="proposedLimit")

    #set($str7="approvedLimit")

    #foreach ($mapEntry in $Map.entrySet())
        #foreach ($map1 in $mapEntry.getValue().entrySet())
            #if($map1.key==$str1)
                <td>$map1.getValue()</td>
            #end
        #end
    #end
    </tr>
</table>
<br />
<br />
<span>Regards,</span><BR/>
<span>Test</span><BR/>
</div>
</body>
</html>
<table  style="width:100%; border: 1px solid #dddddd; font-family: Times New Roman, Times, sans-serif;"> 
  <tr>
        <th>Loan Type</th><th>Loan Amount</th><th>Interest Rate</th><th>Loan Repayment Date</th><th>Tenor</th><th>Proposed Limit</th><th>Approved Limit</th>
  </tr>
    #set($columns = ["loanType", "loanAmount", "interestRate", "loanRepaymentDate", "tenor", "proposedLimit", "approvedLimit"])
    #foreach ($subMap in $Map.values())
    <tr>
        #foreach ($column in $columns)
            <td>$subMap.get($column)</td>
        #end
    </tr>
    #end
</table>