涉及主页面内嵌iframe中的列表数据的保存

场景:主表 : 附表 = 1 : m,同一个页面,共同使用一个保存按钮进行两个表的数据保存,页面中间有个查询按钮,可以对子iframe页面的内容进行刷新

流程项目页面内嵌了个子iframe,项目页面表单数据提交保存是一个主表(loan_item_apply),内嵌iframe中的列表数据需要存储于附表中(loan_item_apply_funding)

方案:点击保存时,获取子iframe,将子iframe中需要保存的数据以隐藏域的方式拼接到父窗口的form下方,由于子iframe中的数据是列表数据,所以需要在loan_item_apply表对应的映射类里面添加loan_item_apply_funding表的映射类列表属性

LoanItemAppply类

java 复制代码
private List<LoanItemApplyFunding> fundingList;

获取子iframe中form表单的属性和值并拼接隐藏域于父窗口的form下方

javascript 复制代码
// 调用子iframe中的方法,校验资金方是否使用完成
var iframeWindow = document.getElementById("fundingIframe").contentWindow;
var isFinishUseMoney = iframeWindow.checkFundingMoney(); // 在父窗口中调用子iframe内的function
 if (!isFinishUseMoney){
     return;
 }else{ // 在form表单中拼接项目-资金方存表的相关信息
     const form = document.getElementById("loanItemApplyForm"); // 父窗口表单form
     const table = iframeWindow.document.getElementById("loanItemApplyFundingListDetail"); // 子iframe里的form里面的列表属性
     const rows = table.querySelectorAll("tr");
     for (let i = 1; i < rows.length; i++) { // 获取第二个tr及后续的tr
         const row = rows[i];
         // 检查复选框选中的row
         const checkbox = row.querySelector("input[type='checkbox']");
         if (null != checkbox){
             if (checkbox.checked) { // 遍历选中已勾选的tr
                 // 获取所有input标签内容并新增input隐藏域拼接在form表单后面
                 const inputs = row.querySelectorAll("input");
                 inputs.forEach((input) => {
                     const hiddenInput = document.createElement("input");
                     hiddenInput.type = "hidden";
                     hiddenInput.name = input.name;
                     hiddenInput.value = input.value;
                     form.appendChild(hiddenInput);
                 });
                 // 获取所有select标签内容并新增input隐藏域拼接在form表单后面
                 const selects = row.querySelectorAll("select");
                 selects.forEach((select) => {
                     const hiddenInput = document.createElement("input");
                     hiddenInput.type = "hidden";
                     hiddenInput.name = select.name;
                     hiddenInput.value = select.value;
                     form.appendChild(hiddenInput);
                 });
             }
         }
     }
 }

子iframe中form里面的列表属性展示

html 复制代码
<!-- foreach循环遍历后端传过来的list -->
<tr>
	<!-- input框 -->
	<td>
		<input type="checkbox" class="pk" name="fundingList[${item.index}].属性名"
			   id="fundingList[${item.index}].属性名" 
			   value="${fundingList元素中对应的属性值}" />
	</td>
	<!-- select下拉框 -->
	<td>
		<select id="fundingList[${item.index}].属性名" name="fundingList[${item.index}].属性名" value="${fundingList元素中对应的属性值}">
			<!-- 循环遍历下拉框选项optionList -->
			<option value="${optionList元素中对应的属性值}">${optionList元素中对应的属性值}</option>
		</select>
	</td>
</tr>
相关推荐
爱学英语的程序员1 分钟前
面试官:你了解过哪些数据库?
java·数据库·spring boot·sql·mysql·mybatis
何中应7 分钟前
nvm安装使用
前端·node.js·开发工具
xixixin_7 分钟前
【JavaScript 】从 || 到??:JavaScript 空值处理的最佳实践升级
开发语言·javascript·ecmascript
雯0609~14 分钟前
hiprint:实现项目部署与打印3-vue版本-独立出模板设计与模板打印页面
前端·vue.js·arcgis
杜子不疼.19 分钟前
【Linux】教你在 Linux 上搭建 Web 服务器,步骤清晰无门槛
linux·服务器·前端
belldeep22 分钟前
python:用 Flask 3 , mistune 2 和 mermaid.min.js 10.9 来实现 Markdown 中 mermaid 图表的渲染
javascript·python·flask
callJJ37 分钟前
Spring AI 文本聊天模型完全指南:ChatModel 与 ChatClient
java·大数据·人工智能·spring·spring ai·聊天模型
CBeann38 分钟前
企业级规则引擎落地实战:动态脚本引擎 QLExpress ,真香!
java·ai·大模型·规则引擎·qlexpress·大厂实战项目
懈尘38 分钟前
从 Java 1.7 到 Java 21:逐版本深入解析新特性与平台演进
java·开发语言
亓才孓39 分钟前
[Maven]Maven基础
java·maven