Java 8 导叶碎片,缺少结束标记
我正试图遵循中给出的示例。我的理解是,根据手册,我的代码应该生成一个带有单个复选框的HTML表单。没有。我在这里误解了什么 特别是,我的英语中有一个莫名其妙的例外:Java 8 导叶碎片,缺少结束标记,java-8,wicket,Java 8,Wicket,我正试图遵循中给出的示例。我的理解是,根据手册,我的代码应该生成一个带有单个复选框的HTML表单。没有。我在这里误解了什么 特别是,我的英语中有一个莫名其妙的例外: org.apache.wicket.markup.MarkupException: Close tag not found for tag: <div wicket:id="formElement">. For Fragment Components only raw markup is allow in between
org.apache.wicket.markup.MarkupException: Close tag not found for tag: <div wicket:id="formElement">. For Fragment Components only raw markup is allow in between the tags but not other Wicket Component.. Component: [Fragment [Component id = formElement]]
应该是:
<body>
<p>Foo</p>
<form>
<div wicket:id="formElement"></div>
<wicket:fragment wicket:id="chk">
<input type="checkbox">
</wicket:fragment>
<input type="submit" value="request">
</form>
</body>
不幸的是,“片段”不可重用,因为硬编码的
wicket:id
用于查找HTML标记块并将其添加到目标容器中。并且不能添加具有相同ID的两个组件。Wicket Fragment是一个内联面板。也就是说,您只需将其Java代码放在标记提供程序的Java文件中,将其HTML放在标记提供程序的HTML代码中
您案例中的问题是缺少一个HTML元素,该元素将使用片段生成的HTML
我将用面板来解释,因为我认为这更容易,但它们或多或少是一样的。使用面板时,需要声明类似于
的内容,然后在Java代码中声明类似于:
add(new MyPanel("myPanel", ...));
Wicket将呈现MyPanel并将生成的HTML用作
的子级
对于Fragment,它是相同的-您需要:
- 声明:
- 标记:
(就像
)
<body>
<p>Foo</p>
<form>
<div wicket:id="formElement"></div>
<wicket:fragment wicket:id="chk">
<input type="checkbox">
</wicket:fragment>
<input type="submit" value="request">
</form>
</body>
public Home() {
RepeatingView rv = new RepeatingView("formElement");
Fragment chkbox = new Fragment("formElement", "chk", this);
rv.add(chkbox);
this.add(rv);
}
add(new MyPanel("myPanel", ...));