在开发中遇到一个问题,需要将表单填写的内容,同步到 HTML 表格中。因为源表格很复杂,最终使用的方案是,部分字段表单页面中填写,而后同步到 HTML中,再存储数据库。
/**
* 解析模板
*
* @param map HashMap 键值
* @param tpl String 模板
* @return String
*/
public String parseTpl(HashMap<String, String> map, String tpl) {
String regex = "";
String value = "";
for (String key : map.keySet()) {
value = map.get(key);
regex = "(<td[^>]*id=\"" + key + "\"[^>]*>)(.*?)(</td>)";
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(tpl);
tpl = matcher.replaceAll("$1" + value + "$3");
}
return tpl + "<br />";
}
/**
* 保存数据(插入或更新)
*
* @param productCustomerComplaints ProductCustomerComplaints
*/
@Override
@Transactional
public void save(ProductCustomerComplaints productCustomerComplaints) {
HashMap<String, String> map = new HashMap<>();
map.put("workOrderCode", productCustomerComplaints.getWorkOrder().getOrderNum());
map.put("customerName", productCustomerComplaints.getCustomer().getCustomerName());
map.put("customerProductCode", productCustomerComplaints.getCustomerProductCode());
map.put("proCode", productCustomerComplaints.getProCatalog().getProCode());
map.put("proName", productCustomerComplaints.getProCatalog().getProName());
map.put("supplierName", productCustomerComplaints.getSupplierName());
map.put("badNumber", productCustomerComplaints.getBadNumber());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = sdf.format(productCustomerComplaints.getSubmitDate());
map.put("submitDate", formattedDate);
productCustomerComplaints.setEightDisciplineReport(parseTpl(
map,
productCustomerComplaints.getEightDisciplineReport()
));
super.save(productCustomerComplaints);
}示例 HTML 模板:
<td width="141" valign="middle" style="word-break: break-all;" align="center"><p><span style="font-size: 16px;">主题</span></p> <p><span style="font-size: 14px;"> (Subject)</span></p></td> <td valign="middle" align="center" style="word-break: break-all;" rowspan="1" colspan="3" id="workOrderCode"><br/></td>
步骤:
- 模板中 td 单格中定义好 id
- 获取表单中字段值,并放入 HashMap 中
- 正则匹配 HTML 中 td 项,并将内容替换为实际值
- 返回替换结果并存储