wicket中出现意外的RuntimeException

问题描述 投票:0回答:1

问题

我一直收到此错误。我正在关注http://www.7thweb.net/wicket-jquery-ui/wizard/DefaultWizardPage?1上的教程。我试图解决它,但没有任何效果。请帮助!!!

错误

最后原因:以下组件无法渲染。可能的原因可能是:1)您已在代码中添加了一个组件,但忘记了在标记中引用它(因此该组件将永远不会呈现),2)如果您的组件是在父容器中添加的,请确保子容器的标记在中包含它们。

  1. [[RequiredTextField [组件ID =名称,页面= com.mycompany.WizardPage,路径=向导:form:view:name,类型= org.apache.wicket.markup.html.form.RequiredTextField,isVisible = true,isVersioned =假]]
  2. [[EmailTextField [组件ID =邮件,页面= com.mycompany.WizardPage,路径=向导:form:view:mail,类型= org.apache.wicket.markup.html.form.EmailTextField,isVisible = true,isVersioned =假]]

The Stacktrace

根本原因:

org.apache.wicket.WicketRuntimeException:以下组件未能呈现。可能的原因可能是:1)您已在代码中添加了一个组件,但忘记了在标记中引用它(因此该组件将永远不会呈现),2)如果您的组件是在父容器中添加的,请确保子容器的标记在中包含它们。

  1. [[RequiredTextField [组件ID =名称,页面= com.mycompany.WizardPage,路径=向导:form:view:name,类型= org.apache.wicket.markup.html.form.RequiredTextField,isVisible = true,isVersioned =假]]
  2. [EmailTextField [组件ID =邮件,页面= com.mycompany.WizardPage,路径=向导:form:view:mail,类型= org.apache.wicket.markup.html.form.EmailTextField,isVisible = true, isVersioned = false]]

    在org.apache.wicket.Page.checkRendering(Page.java:663)在org.apache.wicket.Page.endComponentRender(Page.java:316)在org.apache.wicket.Component.renderPart(Component.java:2206)在org.apache.wicket.page.XmlPartialPageUpdate.writeComponent(XmlPartialPageUpdate.java:75)在org.apache.wicket.page.PartialPageUpdate.writeComponents(PartialPageUpdate.java:262)在org.apache.wicket.page.PartialPageUpdate.writeTo(PartialPageUpdate.java:161)在org.apache.wicket.ajax.AjaxRequestHandler.respond(AjaxRequestHandler.java:361)在org.apache.wicket.request.cycle.RequestCycle $ HandlerExecutor.respond(RequestCycle.java:914)在org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65)在org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:282)在org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:253)在org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221)在org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:275)在org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:206)在org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:299)在io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)在io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter(FilterHandler.java:131)在io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)在io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)在io.undertow.servlet.handlers.ServletChain $ 1.handleRequest(ServletChain.java:68)在io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)在org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)处在io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)在io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)在io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)在io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)在io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)在io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)在io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)在io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)在io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)在io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)在io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)在org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)处在io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)在org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)在io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)在io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)在io.undertow.servlet.handlers.ServletInitialHandler.access $ 100(ServletInitialHandler.java:81)在io.undertow.servlet.handlers.ServletInitialHandler $ 2.call(ServletInitialHandler.java:138)在io.undertow.servlet.handlers.ServletInitialHandler $ 2.call(ServletInitialHandler.java:135)在io.undertow.servlet.core.ServletRequestContextThreadSetupAction $ 1.call(ServletRequestContextThreadSetupAction.java:48)在io.undertow.servlet.core.ContextClassLoaderSetupAction $ 1.call(ContextClassLoaderSetupAction.java:43)在org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda $ create $ 0(SecurityContextThreadSetupAction.java:105)在org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0(UndertowDeploymentInfoService.java:1502)在org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0(UndertowDeploymentInfoService.java:1502)在org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0(UndertowDeploymentInfoService.java:1502)在org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService $ UndertowThreadSetupAction.lambda $ create $ 0(UndertowDeploymentInfoService.java:1502)在io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)在io.undertow.servlet.handlers.ServletInitialHandler.access $ 000(ServletInitialHandler.java:81)在io.undertow.servlet.handlers.ServletInitialHandler $ 1.handleRequest(ServletInitialHandler.java:104)在io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)在io.undertow.server.HttpServerExchange $ 1.run(HttpServerExchange.java:830)在org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)在org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)在org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)在org.jboss.threads.EnhancedQueueExecutor $ ThreadBody.run(EnhancedQueueExecutor.java:1378)在java.lang.Thread.run(Thread.java:748)

WizardPage.html

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<head>
   <title>My experiment</title>
   <link rel="stylesheet" href="style.css" type="text/css" media="screen" title="Stylesheet" />
</head>
<body>
<h1>Hi 3</h1>
<h3>Hi 2</h3>
<!--<wicket:extend>-->
   <div id="demo-panel">
       <form wicket:id="form">
           <button wicket:id="open">Create User</button>
           <br/><br/>
           <div wicket:id="feedbackPanel" style="width: 360px;">

           </div>

       </form>
       <div wicket:id="wizard">

       </div>
<!--        <input wicket:id="wizard:name"/>-->
<!--        <input wicket:id="name"/>-->
   </div>

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

WizardPage.java



import com.googlecode.wicket.jquery.ui.JQueryIcon;
import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
import com.googlecode.wicket.jquery.ui.panel.JQueryFeedbackPanel;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.FeedbackPanel;

public class WizardPage extends WebPage {
    private static final long serialVersionUID = 1L;

    public WizardPage() {
        // Form//
        Form<Void> form  = new Form<Void>("form");
        this.add(form);
        //FeedbackPanel//
        final FeedbackPanel feedbackPanel  = new JQueryFeedbackPanel("feedbackPanel");
        //form.add(feedbackPanel);
        form.add(feedbackPanel.setOutputMarkupId(true));

        // Wizard //
        final UserWizard wizard = new UserWizard("wizard", "Create a user") {

            private static final long serialVersionUID = 1L;

            @Override
            protected void onCancel(AjaxRequestTarget target)
            {
                this.info("Canceled...");
                target.add(feedbackPanel);
            }

            @Override
            protected void onFinish(AjaxRequestTarget target)
            {
                User user = this.getModelObject();

                this.info(String.format("Created user: '%s' - %s [%s]", user.getName(), user.getMail(), user.getRole()));
                target.add(feedbackPanel.setEscapeModelStrings(false));
            }
        };

        this.add(wizard);

        // Button //
        form.add(new AjaxButton("open") {

            private static final long serialVersionUID = 1L;

            @Override
            protected String getIcon()
            {
                return JQueryIcon.GEAR;
            }

            @Override
            protected void onSubmit(AjaxRequestTarget target)
            {
                wizard.setModelObject(new User());
                wizard.open(target);
            }
        });

    }



}

UserWizard.java

package com.mycompany;

import com.googlecode.wicket.jquery.ui.widget.wizard.*;
import org.apache.wicket.extensions.wizard.*;
import org.apache.wicket.markup.html.form.EmailTextField;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;


import java.util.Arrays;

abstract class UserWizard extends AbstractWizard<User>
{
    private static final long serialVersionUID = 1L;

    public UserWizard(String id, String title)
    {
        super(id, title);

        WizardModel wizardModel = new WizardModel();

        wizardModel.add(new Step1());
        wizardModel.add(new Step2());
        wizardModel.add(new Step3());
        wizardModel.setLastVisible(true); // makes the 'last step button' visible

        this.init(wizardModel);
    }

    @Override
    protected IModel<?> initModel()
    {
        // We need to have a model at initialization if none has been supplied to the ctor
        // Calling #setModel should be avoided afterward, so we can specify a CPM here
        return new CompoundPropertyModel<User>(new Model<User>());
    }

    /**
     * Provides the 'Name and email' step<br>
     * Associated markup file is DefaultWizardPage$UserWizard$Step1.html
     */
    class Step1 extends WizardStep
    {
        private static final long serialVersionUID = 1L;

        public Step1()
        {
            super("Name & email", "Please provides a user name and an email");

            this.add(new RequiredTextField<String>("name"));
            this.add(new EmailTextField("mail"));
        }
    }

    /**
     * Provides the 'Role' step<br>
     * Associated markup file is DefaultWizardPage$UserWizard$Step2.html
     */
    class Step2 extends WizardStep
    {
        private static final long serialVersionUID = 1L;

        public Step2()
        {
            super("User role", "Please select the user role");

            this.add(new RadioChoice<String>("role", Arrays.asList("Admin", "User", "Guest")).setRequired(true));
        }
    }

    /**
     * Provides the 'summary' step
     */
    class Step3 extends StaticContentStep
    {
        private static final long serialVersionUID = 1L;

        public Step3()
        {
            super("Summary", "Please review information below:", Model.of(), true);
        }

        @Override
        protected void onConfigure()
        {
            super.onConfigure();

            User user = UserWizard.this.getModelObject();

            StringBuilder builder = new StringBuilder("<ul>");
            builder.append("<li>").append("User name: ").append(user.getName()).append("</li>");
            builder.append("<li>").append("User mail: ").append(user.getMail()).append("</li>");
            builder.append("<li>").append("User role: ").append(user.getRole()).append("</li>");
            builder.append("</ul>");

            this.setContentModel(Model.of(builder.toString()));
        }
    }
}


User.java

package com.mycompany;

import org.apache.wicket.util.io.IClusterable;

public class User implements IClusterable
{
    private static final long serialVersionUID = 1L;

    private String name;
    private String mail;
    private String role;
    private Avatar avatar;

    public User()
    {
        this.name = "";
        this.mail = "";
        this.role = "";
    }

    public User(String name, String mail, String role)
    {
        this.name = name;
        this.mail = mail;
        this.role = role;
    }

    public String getName()
    {
        return this.name;
    }

    public String getMail()
    {
        return this.mail;
    }

    public String getRole()
    {
        return this.role;
    }

    public Avatar getAvatar()
    {
        return avatar;
    }

    public void setAvatar(Avatar avatar)
    {
        this.avatar = avatar;
    }

    @Override
    public String toString()
    {
        return String.format("%s [%s] - %s", this.name, this.mail, this.role);
    }

    // Bean //
    public static class Avatar implements IClusterable
    {
        private static final long serialVersionUID = 1L;

        private final int id;
        private final String path;

        public Avatar(final int id, final String path)
        {
            this.id = id;
            this.path = path;
        }

        public int getId()
        {
            return this.id;
        }

        public String getImagePath()
        {
            return "images/avatars/" + this.path;
        }

        @Override
        public String toString()
        {
            return "Avatar #" + this.id;
        }
    }
}


java html intellij-idea wicket
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.