自动填充集

自动填充集,第1张

自动填充集

您无法

Set
在MVC中用作绑定目标,因为无法为其项目创建属性路径。

您应该使用什么

Map<Integer, YourType>
构建动态表单时应使用。我们已经实现了很多次(所以我知道它正在工作)是这样的:

  • 一个简单的数字序列用作键,而与实际项目没有任何联系
  • 按键顺序始终在增加,但不需要连续(例如,如果用户将删除第二项,您将得到
    1, 3, 4, ...
  • 如果要添加其他项目,只需找到最大的编号,然后添加带有索引的表格
    maxIndex + 1
    (总是增加顺序)
  • Map
    实施 必须是 实例
    linkedHashMap
    ,使迭代顺序被保存(spring创建默认情况下此实现,如果
    Map
    要autopopulated领域的需求)
  • Map
    必须有一些父窗体对象的一部分(即你不能有
    Map
    作为顶级表单对象),因此spring是能够从属性的getter推断泛型类型

视图和Javascript实现示例

有很多方法可以使用它。例如,我们有一个特殊的 模板子表单 ,当我们需要动态添加另一个子表单时使用。这种方法可能要复杂一些:

<form:form action="${formUrl}" method="post" modelAttribute="organizationUsersForm">    <%-- ... other fields ... --%>    <div id="userSubforms">        <c:forEach items="${organizationUsersForm.users.entrySet()}" var="subformEntry"> <div data-subform-key="${subformEntry.key}">     <spring:nestedPath path="users['${subformEntry.key}']">         <%@ include file="user-subform.jspf" %>     </spring:nestedPath> </div>        </c:forEach>    </div>    <button onclick="addSubform(jQuery('#userSubforms'), 'users', 'user', 'userTemplate');">ADD ANOTHER USER</button>    <%-- other form fields, submit, etc. --%></form:form><div  data-subform-template="user">    <spring:nestedPath path="userTemplate">        <%@ include file="user-subform.jspf" %>    </spring:nestedPath></div><script>    function addSubform(subformContainer, subformPath, templateName, templatePath) {        // Find the sequence number for the new subform        var existingSubforms = subformContainer.find("[data-subform-key]");        var subformIndex = (existingSubforms.length != 0) ?     parseInt(existingSubforms.last().attr("data-subform-key"), 10) + 1 : 0;        // Create new subform based on the template        var subform = jQuery('<div data-subform-key="' + subformIndex + '" />').     append(jQuery("[data-subform-template=" + templateName + "]").children().clone(true));        // Don't forget to update field names, identifiers and label targets        subform.find("[name]").each(function(node) { this.name = subformPath + "["+ subformIndex +"]." + this.name;        });        subform.find("[for^=" + templatePath + "]").each(function(node) { this.htmlFor = this.htmlFor.replace(templatePath + ".", subformPath + "["+ subformIndex +"].");        });        subform.find("[id^=" + templatePath + "]").each(function(node) { this.id = this.id.replace(templatePath + ".", subformPath + "["+ subformIndex +"].");        });        // Add the new subform to the form        subformContainer.append(subform);    }</script>

现在,您可以问 “用户如何删除子表单” ?如果子表单JSPF包含以下内容,这将非常简单:

<button onclick="jQuery(this).parents('[data-subform-key]').remove();">DELETE USER</button>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5010118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存