在开发中遇到一个问题,需要将表单填写的内容,同步到 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 项,并将内容替换为实际值
- 返回替换结果并存储