【问题标题】:Wicket : org.apache.wicket.markup.MarkupNotFoundException检票口:org.apache.wicket.markup.MarkupNotFoundException
【发布时间】:2017-04-04 11:03:29
【问题描述】:

WelcomePage.java

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.Model;

import java.io.Serializable;
import java.util.ArrayList;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.markup.repeater.data.ListDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import com.ui.*;



 public class WelcomePage extends WebPage{

 private static final long serialVersionUID = 1L;

 public WelcomePage(){

    Contact contact = null;
    final List<Contact> list = new ArrayList<Contact>();

    char character;

    // a - z
    for(int i = 97; i < 123; i++){
        character = (char) i;
        contact = new Contact(String.valueOf(character));
        list.add(contact);
    }

    final DataView<Contact> dataView =
        new DataView<Contact>("simple", new ListDataProvider<Contact>(list)){

            private static final long serialVersionUID = 1L;

            @Override
            public void populateItem(final Item<Contact> item){
                final Contact user = item.getModelObject();
                item.add(new Label("id", user.getId()));
            }
        };

    dataView.setItemsPerPage(10);

    add(dataView);

    add(new PagingNavigator("navigator", dataView));
}

}

WelcomePage.html

<!DOCTYPE html>
<html>

<body>

<span wicket:id="lbl"> </span>


<wicket:extend>

<table cellspacing="0" class="dataview">
 <tbody>
   <tr wicket:id="simple">
     <td><span wicket:id="id">Test ID</span></td>
   </tr>
</tbody>
</table>

<div wicket:id="navigator"></div>

</wicket:extend>
</body>
</html>

以上代码用于显示Dataview - https://cwiki.apache.org/confluence/display/WICKET/A+Simple+DataView+Example

当我执行上述代码时,我收到以下错误..

 Last cause: Can not determine Markup. Component is not yet connected to a parent. [Page class = com.kaiinos.kriti.ui.WelcomePage, id = 12, render count = 1]

堆栈跟踪 - 根本原因:

org.apache.wicket.markup.MarkupNotFoundException: Can not determine Markup. Component is not yet connected to a parent. [Page class = com.kaiinos.kriti.ui.WelcomePage, id = 12, render count = 1]
 at org.apache.wicket.Component.getMarkup(Component.java:751)
 at org.apache.wicket.Component.internalRender(Component.java:2378)
 at org.apache.wicket.Component.render(Component.java:2341)
 at org.apache.wicket.Page.renderPage(Page.java:1018)
 at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:124)
 at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:236)
 at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175)
 at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:895)
 at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
 at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:265)
 at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:222)
 at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293)
 at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261)
 at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
 at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 at java.lang.Thread.run(Thread.java:745)

编辑 - 修改了 java 代码和 html 但得到相同的错误。我只是一个初学者。 任何帮助将不胜感激。提前谢谢您。

【问题讨论】:

  • 检查你的标记,它是无效的:xml 声明必须放在第一位。
  • ...而您正在使用 ,我们的 BasePage 是否有它的标记?
  • 异常显示“WelcomePage”,但您的 Java 代码是关于 Sub1Page。此外,您的 HTML 不完整。我需要关闭元素,例如

标签: java html apache wicket


【解决方案1】:

您提供的代码存在一些问题。如果您想学习如何编写 wicket 应用程序(而不是针对明确定义的问题寻求帮助)StackOverflow 不适合您。正如@martin-g 建议的那样,您可能需要查看Wicket user guide

至于你当前的代码:

  • &lt;wicket:extend&gt; 定义了一组 html 来代替父组件标记中的 &lt;wicket:child&gt; 标记。这意味着&lt;wicket:extend&gt; 之外的任何内容,例如您的&lt;span wicket:id="lbl"&gt; &lt;/span&gt;,都会被忽略。
  • 使用&lt;wicket:extend&gt; 表明存在一个父组件,其关联的HTML 文件包含&lt;wicket:child&gt;WelcomePage 的父组件是 Wicket 的 WebPage,但它没有关联的 HTML 文件。这意味着您不能在 WelcomePage 中使用 &lt;wicket:extend&gt;
  • WelcomePage 的构造函数称为Sub1Page。我猜这是您其他代码的剩余部分?无论如何都是无效的。

尝试将 WelcomePage 的 HTML 重写为类似:

<!DOCTYPE html>
<html xmlns:wicket>
<body>

<table cellspacing="0" class="dataview">
 <tbody>
   <tr wicket:id="simple">
     <td><span wicket:id="id">Test ID</span></td>
   </tr>
</tbody>
</table>

<div wicket:id="navigator"></div>
</body>
</html>

【讨论】:

  • 非常感谢您的解释......按照建议修改了 Html 代码,但出现错误 - 最后一个原因:无法在 [Page class= com.kaiinos.kriti 中找到 ID 为“simple”的组件.ui.WelcomePage,id = 0,渲染计数 = 1] 预期:':简单'。发现具有相似名称:''
  • 该异常意味着您的 html 引用了 wicket:id="simple",但您尚未添加 id 为“简单”的组件。在您的示例中,您正在构建一个 ID 为“simple”的DataView dataView 并将其添加到页面中,所以我不确定为什么会出现此错误。您确定您仍在向页面添加该组件并且 id 是否仍与 html 中的 wicket:id 相同?
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多