【问题标题】:Nesting of forms - JSP, HTML表单的嵌套 - JSP、HTML
【发布时间】:2011-08-26 10:22:53
【问题描述】:

所以最近几天我一直在阅读有关 JSP 和 HTML 的内容。我读到 HTML 中不可能有嵌套表单。

有没有人知道如何做到这一点?是否有一些 JSP 代码可以帮助解决这个问题?我的 JSP/Java 书中没有这样的东西。

请参阅我有一个表单,其中有用户可以动态添加或删除的元素 - 包括新表单。所以你可以把它想象成一个层次结构——我有一个父表单,有 X(用户定义)孩子,每个孩子可以有 Y(用户定义)孩子..等等 所以当一个表单被提交时,它会在这个表单中创建一个新表单——然后当最外面的表单被提交时,表单和子表单的所有细节都会被复合到一个报告中(我还没有决定我要做什么)这条信息)。所有这些信息都是特定于位置的,因此嵌套是强制性的。

我已经制作了一个带有全局变量和一些 javascript 的 hack - 但它很容易受到攻击,并且很可能会在添加“用户”的概念、会话等时破坏。所以我根本不想使用它,考虑到调试会很痛苦。

谢谢, U.

【问题讨论】:

    标签: java html eclipse forms jsp


    【解决方案1】:

    你的第一句话是对的;您不能在 HTML 中嵌套表单。

    如果您使用嵌套表单编写类似于 HTML 的内容,您可能会发现浏览器之间的行为不同。有些可能会在第一个 </form> 块之后切断表单字段,有些可能会提交所有字段元素,有些可能会按您的预期工作。

    如果您的数据在本质上是分层的,正如您的帖子所建议的那样,那么我可能会处理它的方式是拥有一个带有许多 <submit> 按钮的单个 <form> 元素。然后,您可以选择仅检查与用户单击的按钮相关的表单字段。例如如果他们点击“孩子 1”,那么您的 JSP 只会查看与“孩子 1”相关的字段。

    您需要确保您的字段名称是唯一命名的 - 例如通过某种分层命名方案 - 例如<input type="text" name="Parent_Child1_name">

    【讨论】:

    • 我同意,并且已经尝试过(大部分)——但是我的其余内容呢——将整个 HTML 页面放在
      子句中肯定是不正确的吗?谢谢
    • 您不会将整个 HTML 页面放在 <form>/</form> 中,但我认为将绝大多数 <body> 放在一个中没有问题。跨度>
    • 是的,谢谢。似乎不是这样,有 1 个表单,有 2 个子项,其中包含提交 和每个子项都有提交 - 所以当我单击子提交的子项时,第一个子项关闭,因为第一次提交的请求没有再次提交 - 因此第一个孩子没有打开,第三个不会......这种方式似乎很糟糕 - 我真的不敢相信世界上任何地方都不需要嵌套表格。我一直在网站上看到它,添加新元素以使此页面按您想要的方式,通过按按钮和添加 HTML 元素,它们本身可以添加到
    • 我见过其他程序员使用
    • 我怀疑您的 2 个孩子的问题出在服务器端;如果您没有使用 AJAX 技术,那么如果您单击 any 提交按钮,您将不得不复制整个表单,包括所有子表单,而不仅仅是您提交的那个。
    【解决方案2】:

    阅读您的描述后,我立即想到了 jQuery 和 JavaScript。您可以根据需要动态修改 DOM 以添加和删除 HTML 元素,而不是嵌套 <form> 元素。我建议尝试一下。

    【讨论】:

    • 甚至可以在 JavaScript 中创建嵌套表单。嵌套表单中控件的行为完全由 HTML5 定义。只有 HTML (text/html) 解析器会阻止嵌套表单的创建。
    • 我对 DOM 的研究不多,但它本质上是以分层性质设置 html 文档 - 即 document.parent.textfield 等 - 从根本上讲,这将起作用,我只是没有足够了解是否方面的创建/删除很容易或灵活等。感谢您的回复。欣赏它。美国。
    • dev.w3.org/html5/spec/forms.html#the-form-element 明确表示对于表单,“没有表单元素后代” - 我将其解释为您不能嵌套表单。
    • @gdt - 这里的“不能”有两种不同的用法。有“=不可能”,也有“=无效”。 HTML 解析器无法在 text/html mime 类型中执行此操作;该规范使其违反了内容模型 - 即它无效。但是通过 JavaScript 这绝对是可能的。请参阅dev.w3.org/html5/spec/… 了解表单/控件关联如何工作的说明,特别是关于“表单关联元素默认情况下与其最近的祖先表单元素关联...”的行
    • @Alohci - 你是对的。这在技术上是可行的,并且行为在规范中得到了很好的定义(尽管您最终仍会得到一个不合格的文档)。不过,就个人而言,我认为我会避免这样做,我怀疑调试会很痛苦。
    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    相关资源
    最近更新 更多