Hello,

I have a page which contains a table form. Inside this table there are some 
message objects and their data shown. Moreover the user can select some of the 
messages and trigger some action on them. Then there should be a modal window 
where the user have to set a remark for the selected messages.

The modal window:
public class RemarkModalWindow extends ModalWindow{

        /** serialVersionUID */
        private static final long serialVersionUID = 8798141972520682460L;

        /**
         * Constructor for the modal window.
         *
         * @param id the id of the modal window
         */
        public RemarkModalWindow(String id) {
                super(id);

                RemarkPanel remarkPanel = new RemarkPanel(this.getContentId(), 
this);
                this.setContent(remarkPanel);

                this.setCloseButtonCallback(new 
ModalWindow.CloseButtonCallback() {
                        /** serialVersionUID */
                        private static final long serialVersionUID = 
4018212161671004354L;

                        @Override
                        public boolean onCloseButtonClicked(AjaxRequestTarget 
target) {
                                DAPForm<FaultModel> remarkForm = 
remarkPanel.getRemarkForm();
                                
remarkForm.error(getString("remarkModalClose.errorMessage"));
                                target.add(remarkForm);
                                return false;
                        }
                });
        }

    @Override
    public boolean isResizable(){
        return false;
    }

    @Override
    public int getInitialWidth(){
        return 500;
    }

    @Override
    public int getInitialHeight(){
        return 100;
    }

    @Override
    public IModel<String> getTitle(){
                return Model.of(getString("remarkModal.title"));
        }
}

So I created a modal window which contains a panel. Inside the panel there is a 
form with the textfield for the remark and an "add" button. If I click the 
"add" button the window should be closed and the message objects should get the 
remark.
The panel inside the modal window:
public class RemarkPanel extends Panel {

        /** serialVersionUID */
        private static final long serialVersionUID = -8422969117822175332L;

        RemarkForm remarkForm;

        /**
         * Constructor which creates the panel.
         *
         * @param id the id of the panel
         * @param remarkModalWindow
         */
        public RemarkPanel(String id, RemarkModalWindow remarkModalWindow) {
                super(id);

                remarkForm = (RemarkForm)FormFactory.getForm(DAPType.REMARK);
                remarkForm.setModalWindow(remarkModalWindow);
                add(remarkForm);
        }

        public DAPForm<FaultModel> getRemarkForm() {
                return (DAPForm<FaultModel>) this.remarkForm;
        }
}

The Form inside the panel:
public class RemarkForm extends DAPForm<FaultModel> {

        /** serialVersionUID */
        private static final long serialVersionUID = -3714702420141947828L;
        private ModalWindow modalWindow;

        /**
         * Constructor which creates a form to set the remark of a fault 
message.
         *
         * @param id the id of the form
         */
        public RemarkForm(String id) {
                super(id);

                setDefaultModel(new CompoundPropertyModel<FaultModel>(new 
FaultModel()));

                addTextfields();
                addButtons();
        }

        /**
         * Adds the additional textfields.
         */
        private void addTextfields() {
                TextField<String> faultRemark = new TextField<>("faultRemark");

                add(faultRemark);
        }

        /**
         * Adds the buttons to the form.
         */
        private void addButtons() {
                add(new AddRemarkButton("addRemarkButton", this, modalWindow));
        }


        public void setModalWindow(ModalWindow modalWindow) {
                this.modalWindow = modalWindow;
        }
}

This is my "add" button:
public class AddRemarkButton extends AjaxButton {

        /** serialVersionUID */
        private static final long serialVersionUID = -8702103017249783842L;


        private ModalWindow modalWindow;

        public AddRemarkButton(String id, Form<?> form, ModalWindow 
modalWindow) {
                super(id, form);
                this.modalWindow = modalWindow;
        }

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                FaultModel faultModel = (FaultModel)form.getModelObject();
                String remark = faultModel.getFaultRemark();
                System.out.println("Remark: " + remark);

                modalWindow.close(target);
        }
}

If I click the "add" button in the modal window I get the following exception:

    java.lang.NullPointerException
         at 
com.tsystems.dap.console.components.button.AddRemarkButton.onSubmit(AddRemarkButton.java:32)
         at 
org.apache.wicket.ajax.markup.html.form.AjaxButton$1.onSubmit(AjaxButton.java:113)
         at 
org.apache.wicket.ajax.form.AjaxFormSubmitBehavior$AjaxFormSubmitter.onSubmit(AjaxFormSubmitBehavior.java:215)
         at 
org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1309)
         at org.apache.wicket.markup.html.form.Form.process(Form.java:976)
         at 
org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:797)
         at 
org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:171)
         at 
org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:155)
         at 
org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:601)
         at java.lang.reflect.Method.invoke(Method.java:498)
         at 
org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
         at 
org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
         at 
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:248)
         at 
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:234)
         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.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
         at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
         at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
         at 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
         at 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
         at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
         at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
         at 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
         at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
         at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
         at 
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
         at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
         at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
         at org.eclipse.jetty.server.Server.handle(Server.java:497)
         at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
         at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
         at 
org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
         at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
         at 
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
         at java.lang.Thread.run(Thread.java:745)
    Complete stack:
    org.apache.wicket.WicketRuntimeException: Method onRequest of interface 
org.apache.wicket.behavior.IBehaviorListener targeted at 
org.apache.wicket.ajax.markup.html.form.AjaxButton$1@15e7639 on component 
[AddRemarkButton [Component id = addRemarkButton]] threw an exception
         at 
org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268)
         at 
org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
         at 
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:248)
         at 
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:234)
         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)
    java.lang.reflect.InvocationTargetException
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
         at java.lang.reflect.Method.invoke(Method.java:498)
         at 
org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
         at 
org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
         at 
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:248)
         at 
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:234)
         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)
I don't know what I am doing wrong. Neither the AjaxRequestTarget nor the 
modalWindow is null. Can please somebody help me please?

Mit freundlichen Grüßen
Christoph Manig


Reply via email to