public ContextMenuPage() {
    ContextMenuItem menuItem1 = new ContextMenuItem();
    menuItem1.setLabel("Option 1");
    menuItem1.setAction("alert('Option 1');");
    ContextMenuItem menuItem2 = new ContextMenuItem();
    menuItem2.setDisabled(true);
    menuItem2.setLabel("Option 2");
    menuItem2.setAction("alert('Option 2');");
    ContextMenuItem menuItem3 = new ContextMenuItem();
    menuItem3.setLabel("Option 3");
    menuItem3.setAction("alert('Option 3');");
    menuItem3.setHoverTitle("Option3 plays an important role.");

    ContextMenuBehavior menuBehavior1 = new ContextMenuBehavior();
    WebMarkupContainer divContainer = new WebMarkupContainer("divmenu");
    divContainer.add(menuBehavior1);
    add(divContainer);
    menuBehavior1.addMenuItem(menuItem1);
    menuBehavior1.addMenuItem(menuItem2);

    ContextMenuBehavior menuBehavior2 = new ContextMenuBehavior();
    Button button = new Button("menuButton");
    button.add(menuBehavior2);
    add(button);
    menuBehavior2.addMenuItem(menuItem1);
    menuBehavior2.addSeperator();
    menuBehavior2.addMenuItem(menuItem2);
    menuBehavior2.addSeperator();
    menuBehavior2.addMenuItem(menuItem3);

    menuBehavior2.setThemes(ContextMenuBehavior.Theme.VISTA);
    menuBehavior2.setOpenOnLeftClick(true);
  }
  protected void constructPanel() {
    Form<AgentPortalCustomCashInConfirmPanel> form =
        new Form<AgentPortalCustomCashInConfirmPanel>(
            "cashInConfirmForm",
            new CompoundPropertyModel<AgentPortalCustomCashInConfirmPanel>(this));

    form.add(new FeedbackPanel("errorMessages"));

    form.add(new Label("cashInBean.accountNumber"));
    form.add(new Label("cashInBean.msisdn"));
    form.add(new Label("cashInBean.displayName"));
    form.add(new AmountLabel("cashInBean.cashinAmount", true, true));

    // Add Confirm button
    Button confirmButton =
        new Button("submitConfirm") {
          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            if (!PortalUtils.exists(cashInBean)) {
              cashInBean = new AgentCustomCashInBean();
            }

            performCashIn();
          };
        };

    confirmButton.add(new AttributePrepender("onclick", Model.of("loading(submitConfirm)"), ";"));

    form.add(confirmButton);

    // Add Back button
    form.add(
        new Button("submitBack") {

          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            setResponsePage(new AgentPortalCustomCashInPage());
          };
        });

    // Add Cancel button
    form.add(
        new Button("submitCancle") {

          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            basePage.handleCancelButtonRedirectToHomePage(AgentPortalHomePage.class);
          };
        });

    add(form);
  }
  protected void constructPanel() {

    final String chooseDtTxt = this.getLocalizer().getString("datepicker.chooseDate", mobBasePage);

    add(
        new HeaderContributor(
            new IHeaderContributor() {

              private static final long serialVersionUID = 1L;

              @Override
              public void renderHead(IHeaderResponse response) {

                // localize the jquery datepicker based on users locale setting
                // locale specific js includes for datepicker are available at
                // http://jquery-ui.googlecode.com/svn/trunk/ui/i18n/
                String localeLang = getLocale().getLanguage().toLowerCase();

                LOG.debug("Using DatePicker for locale language: {}", localeLang);

                if (PortalUtils.exists(localeLang)) {
                  response.renderJavascriptReference(
                      "scripts/jquery/i18n/jquery.ui.datepicker-" + localeLang + ".js");
                }

                response.renderJavascript(
                    "\n"
                        + "jQuery(document).ready(function($) { \n"
                        + "  $('#birthDate').datepicker( { \n"
                        + "	'buttonText' : '"
                        + chooseDtTxt
                        + "', \n"
                        + "	'changeMonth' : true, \n"
                        + "	'changeYear' : true, \n"
                        + "       'yearRange' : '-100:+0', \n"
                        + "	'showOn': 'both', \n"
                        + "	'dateFormat' : '"
                        + Constants.DATE_FORMAT_PATTERN_PICKER
                        + "', \n"
                        + "	'buttonImage': 'images/calendar.gif', \n"
                        + "	'buttonOnlyImage': true} ); \n"
                        + "});\n",
                    "datePicker");
              }
            }));

    final Form<?> form =
        new Form("standingDataForm", new CompoundPropertyModel<StandingDataPanel>(this));

    if (!PortalUtils.exists(getCustomer().getTaskId()))
      mobBasePage.getMobiliserWebSession().setShowContact(true);
    form.add(new FeedbackPanel("errorMessages"));
    form.add(
            new RequiredTextField<String>("customer.address.firstName")
                .setRequired(true)
                .add(new PatternValidator(Constants.REGEX_FIRSTNAME))
                .add(Constants.mediumStringValidator)
                .add(Constants.mediumSimpleAttributeModifier))
        .add(new ErrorIndicator());

    form.add(
        new DateTextField(
                "birthDateField",
                new PropertyModel<Date>(this, "customer.birthDateString"),
                new PatternDateConverter(Constants.DATE_FORMAT_PATTERN_PARSE, false))
            .setRequired(true)
            .add(new ErrorIndicator()));

    form.add(
        new LocalizableLookupDropDownChoice<Integer>(
                "customer.customerTypeId",
                Integer.class,
                Constants.RESOURCE_BUNDLE_CUSTOMER_TYPE,
                this,
                Boolean.FALSE,
                true)
            .setNullValid(false)
            .setRequired(true));

    form.add(
            new RequiredTextField<String>("customer.address.lastName")
                .setRequired(true)
                .add(new PatternValidator(Constants.REGEX_FIRSTNAME))
                .add(Constants.mediumStringValidator)
                .add(Constants.mediumSimpleAttributeModifier))
        .add(new ErrorIndicator());

    form.add(
        new LocalizableLookupDropDownChoice<String>(
                "customer.language",
                String.class,
                Constants.RESOURCE_BUNDLE_LANGUAGES,
                this,
                false,
                true)
            .add(new ErrorIndicator()));

    form.add(
        new LocalizableLookupDropDownChoice<String>(
                "customer.timeZone",
                String.class,
                Constants.RESOURCE_BUNDLE_TIMEZONES,
                this,
                false,
                true)
            .add(new ErrorIndicator()));

    form.add(
        new TextField<String>("customer.address.street1")
            .add(new PatternValidator(Constants.REGEX_STREET1))
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));

    form.add(
        new TextField<String>("customer.address.houseNo")
            .add(StringValidator.lengthBetween(1, 20))
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));
    form.add(
        new TextField<String>("customer.address.state")
            .add(new PatternValidator(Constants.REGEX_STATE))
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));

    form.add(
        new LocalizableLookupDropDownChoice<String>(
                "customer.address.kvCountry", String.class, "countries", this, false, true)
            .setNullValid(false)
            .setRequired(true)
            .add(new ErrorIndicator()));

    form.add(
        new TextField<String>("customer.address.street2")
            .add(new PatternValidator(Constants.REGEX_STREET1))
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));

    form.add(
        new TextField<String>("customer.address.city")
            .setRequired(false)
            .add(new PatternValidator(Constants.REGEX_CITY))
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));

    form.add(
        new TextField<String>("customer.address.zip")
            .add(new PatternValidator(Constants.REGEX_ZIP))
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));

    TextField<String> msisdn = new TextField<String>("customer.msisdn");
    if (!mobBasePage.getConfiguration().isMsisdnOtpConfirmed()) {
      msisdn.add(new SimpleAttributeModifier("readonly", "readonly"));
      msisdn.add(new SimpleAttributeModifier("style", "background-color: #E6E6E6;"));
    }
    form.add(
        msisdn
            .add(new PatternValidator(Constants.REGEX_PHONE_NUMBER))
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));

    form.add(
        new TextField<String>("customer.address.email")
            .setRequired(true)
            .add(EmailAddressValidator.getInstance())
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));

    form.add(
        new LocalizableLookupDropDownChoice<Integer>(
                "customer.kvInfoMode", Integer.class, "sendModes", this, Boolean.FALSE, true)
            .setNullValid(false)
            .setRequired(true));

    WebMarkupContainer networkProviderDiv = new WebMarkupContainer("networkProviderDiv");

    networkProviderDiv.add(
        new LocalizableLookupDropDownChoice<String>(
                "customer.networkProvider", String.class, "networkproviders", this, false, true)
            .setNullValid(false)
            .setRequired(true)
            .add(new ErrorIndicator()));

    // network provider selection to be made only for mbanking customer
    // types
    if (customer.getCustomerTypeId() != null
        && customer.getCustomerTypeId().intValue() == Constants.MBANKING_CUSTOMER_TYPE) {
      networkProviderDiv.setVisible(true);
    } else {
      networkProviderDiv.setVisible(false);
    }

    form.add(networkProviderDiv);

    form.add(
        new KeyValueDropDownChoice<Long, String>(
            "customer.feeSetId", mobBasePage.getFeeSets(getCustomer().getFeeSetId())) {
          private static final long serialVersionUID = 1L;

          @Override
          protected CharSequence getDefaultChoice(Object selected) {
            return null;
          };
        }.setNullValid(false));

    form.add(
        new KeyValueDropDownChoice<Long, String>(
            "customer.limitId", getLimitSets(getCustomer().getLimitId())) {

          private static final long serialVersionUID = 1L;
        }.setNullValid(true));

    Button feeSetConfButton =
        new Button("feeSetConf") {
          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            setResponsePage(new IndividualFeeSetConfig(getCustomer()));
          };
        }.setDefaultFormProcessing(false);
    feeSetConfButton.add(new PrivilegedBehavior(mobBasePage, Constants.PRIV_CUST_WRITE));
    form.add(feeSetConfButton);

    Button limitSetConfButton =
        new Button("limitSetConf") {
          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            setResponsePage(new IndividualLimitSetConfig(getCustomer()));
          };
        }.setDefaultFormProcessing(false);
    limitSetConfButton.add(new PrivilegedBehavior(mobBasePage, Constants.PRIV_CUST_WRITE));
    form.add(limitSetConfButton);

    form.add(
        new LocalizableLookupDropDownChoice<String>(
                "customer.securityQuestion",
                String.class,
                Constants.RESOURCE_BUNDLE_SEC_QUESTIONS,
                this,
                false,
                true)
            .setNullValid(false)
            .setRequired(true)
            .add(new ErrorIndicator()));

    form.add(
        new TextField<String>("customer.userName")
            .add(new PatternValidator(Constants.REGEX_USERNAME))
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));

    form.add(
        new RequiredTextField<String>("customer.SecQuesAns")
            .add(new PatternValidator(Constants.REGEX_SECURITY_ANSWER))
            .add(Constants.mediumStringValidator)
            .add(Constants.mediumSimpleAttributeModifier)
            .add(new ErrorIndicator()));

    PrivilegedBehavior cancelReasonBehavior =
        new PrivilegedBehavior(mobBasePage, Constants.PRIV_CUST_CANCEL);
    cancelReasonBehavior.setMissingPrivilegeHidesComponent(false);
    KeyValueDropDownChoice<Integer, String> custStatus =
        new KeyValueDropDownChoice<Integer, String>(
            "customer.active", mobBasePage.getCustomerStatus());
    custStatus.add(
        new SimpleAttributeModifier(
            "onchange",
            "confirmDeactivation('"
                + getLocalizer().getString("customer.deactivate.warning", mobBasePage)
                + "')"));
    form.add(custStatus.setNullValid(false).setRequired(true).add(cancelReasonBehavior));

    WebMarkupContainer blackListReasonDiv = new WebMarkupContainer("blackListReasonDiv");
    PrivilegedBehavior blackListBehavior =
        new PrivilegedBehavior(mobBasePage, Constants.PRIV_CUST_BLACKLIST);
    blackListBehavior.setMissingPrivilegeHidesComponent(false);
    blackListReasonDiv.add(
        new LocalizableLookupDropDownChoice<Integer>(
                "customer.blackListReason",
                Integer.class,
                "blackListReasons",
                this,
                Boolean.FALSE,
                true)
            .setNullValid(false)
            .setRequired(true)
            .add(blackListBehavior));

    form.add(blackListReasonDiv);

    WebMarkupContainer cancelDivContainer = new WebMarkupContainer("cancelDivContainer");
    LocalizableLookupDropDownChoice<Integer> cancelationreason =
        new LocalizableLookupDropDownChoice<Integer>(
            "customer.cancelationReason", Integer.class, "cancellationReasons", this, false, true);
    cancelationreason.add(
        new SimpleAttributeModifier(
            "onchange",
            "confirmCancellation('"
                + getLocalizer().getString("customer.cancel.warning", mobBasePage)
                + "')"));
    cancelDivContainer.add(
        cancelationreason.setNullValid(false).setRequired(true).add(cancelReasonBehavior));
    // cancelDivContainer
    // .setVisible(getCustomer().getCustomerTypeId() ==
    // Constants.CONSUMER_IDTYPE
    // || getCustomer().getCustomerTypeId() ==
    // Constants.CUSTOMER_ROLE_MONEY_MERCHANT);
    form.add(cancelDivContainer);
    Button changenMsisdnButton =
        new Button("changeMsisdn") {
          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            Customer customer =
                mobBasePage.getCustomerByIdentification(
                    Constants.IDENT_TYPE_CUST_ID, String.valueOf(getCustomer().getId()));
            if (customer.getCancellationReasonId() != 0 || !customer.isActive()) {
              error(
                  getLocalizer()
                      .getString("customer.msisdn.change.error.customerinactive", mobBasePage));
              return;
            }
            mobBasePage.getMobiliserWebSession().setCustomerOtp(null);
            mobBasePage.getMobiliserWebSession().setCustomerOtpCount(0);
            mobBasePage.getMobiliserWebSession().setCustomerOtpLimitHit(false);
            setResponsePage(new ChangeMsisdnPage(getCustomer()));
          };
        }.setDefaultFormProcessing(false);
    changenMsisdnButton.setVisible(!mobBasePage.getConfiguration().isMsisdnOtpConfirmed());
    changenMsisdnButton.add(new PrivilegedBehavior(mobBasePage, Constants.PRIV_CUST_WRITE));

    form.add(changenMsisdnButton);
    changenMsisdnButton.setVisible(!mobBasePage.getConfiguration().isMsisdnOtpConfirmed());

    form.add(
        new Button("resetPin") {
          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            Customer customer =
                mobBasePage.getCustomerByIdentification(
                    Constants.IDENT_TYPE_MSISDN, getCustomer().getMsisdn());
            if (!PortalUtils.exists(customer)) {
              error(getLocalizer().getString("customer.reset.password.noMsisdn", mobBasePage));
              return;
            }
            setResponsePage(new ResetCredentialPage(getCustomer(), this.getWebPage(), "pin"));
          };
        }.setDefaultFormProcessing(false)
            .add(new PrivilegedBehavior(mobBasePage, Constants.PRIV_CUST_PINCALL)));

    form.add(
        new Button("resetPassword") {
          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            Address address = mobBasePage.getAddressByCustomer(getCustomer().getId());
            if (address == null || !PortalUtils.exists(address.getEmail())) {
              error(getLocalizer().getString("customer.reset.password.noEmail", mobBasePage));
              return;
            }
            setResponsePage(new ResetCredentialPage(getCustomer(), this.getWebPage(), "password"));
          };
        }.setDefaultFormProcessing(false)
            .add(new PrivilegedBehavior(mobBasePage, Constants.PRIV_CUST_PASSWORD)));

    form.add(
        new Button("update") {
          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            if (updateCustomer()) {
              LOG.info(
                  "Data updated successfully for customer["
                      + mobBasePage.getMobiliserWebSession().getCustomer().getId()
                      + "]");
              getSession().info(getLocalizer().getString("data.update.successful", mobBasePage));
              setResponsePage(new StandingDataPage(getCustomer()));
            }
          };
        }.add(new PrivilegedBehavior(mobBasePage, Constants.PRIV_CUST_WRITE))
            .setVisible(!PortalUtils.exists(getCustomer().getTaskId())));

    form.add(
        new Button("approve") {
          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            approveCustomer(true);
          };
        }.setDefaultFormProcessing(false)
            .setVisible(PortalUtils.exists(getCustomer().getTaskId())));

    form.add(
        new Button("reject") {
          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            approveCustomer(false);
          };
        }.setDefaultFormProcessing(false)
            .setVisible(PortalUtils.exists(getCustomer().getTaskId())));

    if (PortalUtils.exists(getCustomer().getTaskId())) {
      Iterator iter = form.iterator();
      Component component;
      for (int i = 0; iter.hasNext(); i++) {
        component = (Component) iter.next();

        if (component.getId().equals("approve")
            || component.getId().equals("reject")
            || component instanceof FeedbackPanel) {
          continue;
        } else if (component instanceof Button) {
          component.setVisible(false);
        } else {

          if (component.getId().equals("blackListReasonDiv")
              || component.getId().equals("cancelDivContainer")) {
            Iterator iter1 = ((WebMarkupContainer) component).iterator();
            Component comp;
            for (int j = 0; iter1.hasNext(); j++) {
              comp = (Component) iter1.next();
              comp.setEnabled(false);
              comp.add(new SimpleAttributeModifier("readonly", "readonly"));
              comp.add(new SimpleAttributeModifier("style", "background-color: #E6E6E6;"));
            }

          } else {
            component.setEnabled(false);
            component.add(new SimpleAttributeModifier("readonly", "readonly"));
            component.add(new SimpleAttributeModifier("style", "background-color: #E6E6E6;"));
          }
        }
      }
    }

    add(form);

    LOG.debug(
        "PatternDateConverter format: "
            + Constants.DATE_FORMAT_PATTERN_PARSE
            + " DatePicker format: "
            + Constants.DATE_FORMAT_PATTERN_PICKER);
  }
  private void createAttachmentsListDataView(
      WebMarkupContainer attachmentContainer, final Form form) {
    WebMarkupContainer msgAttachmentsContainer = new WebMarkupContainer("msgAttachmentsContainer");

    dataProvider = new MessageAttachmentDataProvider(WICKET_ID_name, basePage);

    msgAttachmentList = new ArrayList<MessageAttachment>();

    final DataView<MessageAttachment> dataView =
        new DataView<MessageAttachment>(WICKET_ID_pageable, dataProvider) {

          @Override
          protected void onBeforeRender() {

            try {
              if (!isCreateMode) dataProvider.loadMsgAttachmentsList(message.getId(), forceReload);
              forceReload = false;
              refreshTotalItemCount();
              // reset rowIndex
              rowIndex = 1;
            } catch (DataProviderLoadException dple) {
              LOG.error("# An error occurred while loading friends and family list", dple);
              error(getLocalizer().getString("msgAttachments.load.error", this));
            }

            refreshTotalItemCount();

            super.onBeforeRender();
          }

          @Override
          protected void populateItem(final Item<MessageAttachment> item) {

            final MessageAttachment entry = item.getModelObject();

            msgAttachmentList.add(entry);

            // Select box
            AjaxCheckBox selectedCheckBox =
                new AjaxCheckBoxImpl(WICKET_ID_selected, new Model(isSelected(entry)), entry);

            selectedCheckBox.setOutputMarkupId(true);
            selectedCheckBox.setMarkupId(WICKET_ID_selected + rowIndex++);
            item.add(selectedCheckBox);

            item.add(new Label(WICKET_ID_name, entry.getName()));

            // set items in even/odd rows to different css style classes
            item.add(
                new AttributeModifier(
                    Constants.CSS_KEYWARD_CLASS,
                    true,
                    new AbstractReadOnlyModel<String>() {
                      @Override
                      public String getObject() {
                        return (item.getIndex() % 2 == 1)
                            ? Constants.CSS_STYLE_ODD
                            : Constants.CSS_STYLE_EVEN;
                      }
                    }));
          }

          private void refreshTotalItemCount() {
            totalItemString = new Integer(dataProvider.size()).toString();
            int total = getItemCount();
            if (total > 0) {
              startIndex = getCurrentPage() * getItemsPerPage() + 1;
              endIndex = startIndex + getItemsPerPage() - 1;
              if (endIndex > total) endIndex = total;
            } else {
              startIndex = 0;
              endIndex = 0;
            }
          }

          class AjaxCheckBoxImpl extends AjaxCheckBox {

            private final MessageAttachment entry;

            public AjaxCheckBoxImpl(String id, IModel<Boolean> model, MessageAttachment entry) {
              super(id, model);
              this.entry = entry;
            }

            @Override
            public boolean isEnabled() {
              return true;
            }

            @Override
            protected void onComponentTag(final ComponentTag tag) {
              super.onComponentTag(tag);
              if (getModelObject()) {
                tag.put("checked", "checked");
              }
            }

            @Override
            protected void onUpdate(AjaxRequestTarget target) {
              boolean checkBoxSelected = getModelObject();
              if (checkBoxSelected) {
                LOG.info("Added {} to deletion list", entry.getId());
                selectedAttachments.add(entry);
              } else {
                LOG.info("Removed {} from deletion list", entry.getId());
                selectedAttachments.remove(entry);
              }
            }
          }
        };

    dataView.setItemsPerPage(10);
    msgAttachmentsContainer.add(dataView);

    msgAttachmentsContainer.add(
        new OrderByBorder(WICKET_ID_orderByName, WICKET_ID_name, dataProvider) {
          @Override
          protected void onSortChanged() {
            // For some reasons the dataView can be null when the page is
            // loading
            // and the sort is clicked (clicking the name header), so handle
            // it
            if (dataView != null) {
              dataView.setCurrentPage(0);
            }
          }
        });

    Button removeButton =
        new Button("removeAttachment") {

          private static final long serialVersionUID = 1L;

          @Override
          public void onSubmit() {
            handleRemove();
            createAttachmentContainer(form);
          };

          @Override
          public boolean isVisible() {
            if (dataView.getItemCount() > 0) {
              return super.isVisible();
            } else {
              return false;
            }
          }
        }.setDefaultFormProcessing(false);

    removeButton.add(
        new SimpleAttributeModifier(
            "onclick",
            "return confirm('"
                + getLocalizer().getString("msgAttachments.remove.confirm", this)
                + "');"));

    msgAttachmentsContainer.add(removeButton);

    msgAttachmentsContainer.add(
        new MultiLineLabel(
            WICKET_ID_noItemsMsg,
            getLocalizer().getString("msgAttachments.noItemsMsg", this)
                + "\n"
                + getLocalizer().getString("msgAttachments.addMsgAttachmentsHelp", this)) {
          @Override
          public boolean isVisible() {
            if (dataView.getItemCount() > 0) {
              return false;
            } else {
              return super.isVisible();
            }
          }
        });

    // Navigator example: << < 1 2 > >>
    msgAttachmentsContainer.add(new CustomPagingNavigator(WICKET_ID_navigator, dataView));

    msgAttachmentsContainer.add(
        new Label(WICKET_ID_totalItems, new PropertyModel<String>(this, "totalItemString")));

    msgAttachmentsContainer.add(
        new Label(WICKET_ID_startIndex, new PropertyModel(this, "startIndex")));

    msgAttachmentsContainer.add(new Label(WICKET_ID_endIndex, new PropertyModel(this, "endIndex")));
    attachmentContainer.addOrReplace(msgAttachmentsContainer);
  }