/** * Override preparePaintComponent in order to register the components for the current request. * * @param request the request being responded to */ @Override protected void preparePaintComponent(final Request request) { super.preparePaintComponent(request); List<AjaxTarget> targets = getTargets(); if (targets != null && !targets.isEmpty()) { WComponent triggerComponent = trigger == null ? this : trigger; // The trigger maybe in a different context UIContext triggerContext = WebUtilities.getContextForComponent(triggerComponent); UIContextHolder.pushContext(triggerContext); // TODO The IDs of the targets are based on the Triggers Context. Not good for targets in repeaters try { List<String> targetIds = new ArrayList<>(); for (AjaxTarget target : getTargets()) { targetIds.add(target.getId()); } AjaxHelper.registerComponents(targetIds, triggerComponent.getId()); } finally { UIContextHolder.popContext(); } } }
/** * Override preparePaintComponent to register an AJAX operation if this link has an action. * * @param request the request being responded to. */ @Override protected void preparePaintComponent(final Request request) { super.preparePaintComponent(request); UIContext uic = UIContextHolder.getCurrent(); // If the link has an action, register it for AJAX final Action action = getAction(); final AjaxTarget[] actionTargets = getActionTargets(); if (action != null && uic.getUI() != null) { // Register AJAX operation if AJAX targets are set, otherwise rely on InternalAjax request if (actionTargets != null && actionTargets.length > 0) { List<String> targetIds = new ArrayList<>(); for (AjaxTarget target : actionTargets) { targetIds.add(target.getId()); } // Register the action targets AjaxHelper.registerComponents(targetIds, getId()); } } }