为什么在Wicket模态窗口中有一个表单?

时间:2016-03-01 10:32:51

标签: wicket

当我查看Wicket模态窗口的HTML时,我看到一个表单。它为什么存在?

1 个答案:

答案 0 :(得分:2)

ModalWindow的JavaScript生成<form>以支持以下用例:

+ Page
  + Form("f")
    + TextField("a")
    + ModalWindow("m")
      + Form("f2")
        + TextField("b")

在浏览器中渲染时,嵌套表单“f2”呈现为<div> - 这是Wicket为您所做的事情,因为嵌套表单不是有效的HTML。

当打开时,ModalWindow会删除其包含的标记并将其放入添加到文档正文中的<div>

<form wicket:id="f">
    <input wicket:id="a" />
    <div wicket:id="m">
         <!-- markup removed -->
    </div>
</form>

<div>
   <form> <!-- generated form -->
       <div wicket:id="f2">
           <input wicket:id="b" />
       </div>
   </form>
</div>

如果没有生成的表单,则无法通过Ajax提交模态窗口中的输入。

请注意,这有一个顽皮的暗示: 即使你只想在模态窗口中使用一个表单,你仍然必须有一个包装模态窗口的表单。

没有它:

+ Page
  # wrong - no wrapping form
  + ModalWindow("m")
    + Form("f2")
      + TextField("b")

...“f2”将保持<form>,结果将使两个嵌套表单的HTML无效:

<div wicket:id="m">
     <!-- markup removed -->
</div>

<div>
   <form> <!-- generated form -->
       <form wicket:id="f2">
           <input wicket:id="b" />
       </form>
   </form>
</div>