Hi,

Not certain about 1.4.x but in 6.x if a parent component is disabled then
all its children are disabled as well.
For AbstractLink there is a special #isLinkEnabled() method which combined
with Component#canCallListenerInterface(Method) can make the link enabled
even if any of its parents is disabled.

Good luck!

Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Mon, Dec 8, 2014 at 10:16 PM, Richard W. Adams <rwada...@up.com> wrote:

> We have a use case which requires an enabled link inside a disabled form.
> The form being disabled is based on user's security role, but the link
> being enabled depends on the results returned from a separate database
> query. Thus, we might have a disabled form, but an enabled link, or vice
> versa.  Our link class (below) implements IAuthorizationStrategy, but for
> some reason, when the parent form is disabled, and the link is enabled,
> the onClick() method is not called.
>
> Can anyone see what we're doing wrong?
>
> We use Wicket 1.4.17 (no option to upgrade due to corporate framework
> constraints).
> ______________________________________________________
>
> package com.uprr.enm.web.track.detail;
>
> import org.apache.wicket.Component;
> import org.apache.wicket.ajax.AjaxRequestTarget;
> import org.apache.wicket.ajax.markup.html.AjaxLink;
> import org.apache.wicket.authorization.Action;
> import org.apache.wicket.authorization.IAuthorizationStrategy;
>
> import com.uprr.eni.commons.util.ApiLog;
> import com.uprr.eni.valid.tracks.TrackAttribute;
> import com.uprr.enm.dao.jdbc.track.history.TrackHistoryReadDAO;
> import com.uprr.enm.web.track.history.HistoryModal;
> import
> com.uprr.ui.wicket.components.ajax.listener.RemovePleaseWaitAjaxListener;
> import com.uprr.ui.wicket.components.behavior.PleaseWaitBehavior;
>
>
> //-----------------------------------------------------------------------------------------------
> /**
>  * A link to open a track history modal. This class lets us have a working
> history link even if
>  * the parent form is disabled.
>  */
> class TrackHistoryLink extends AjaxLink<Object> implements
> IAuthorizationStrategy {
>
> private static final long serialVersionUID = 4693199534296169911L;
>
> private TrackAttribute attribute        ;
> private HistoryModal     modal  ;
> private Integer          track  ;
>
>
> //-----------------------------------------------------------------------------------------------
> /**
>  * Constructor.
>  * @param id Markup ID.
>  * @param track Track system number.
>  * @param attribute The track attribute for which history is desired.
>  * @param dao Data access object to provide track history.
>  * @param modal Dialog to display the history data.
>  */
> public TrackHistoryLink(final String id, final Integer track, final
> TrackAttribute attribute,
>         final TrackHistoryReadDAO dao, final HistoryModal modal) {
>
>         super(id);
>         if (dao.historyExists(track, attribute)) {      // If track has
> history records
>                 setEnabled(true);
>                 add(new PleaseWaitBehavior());
>                 this.track              = track;
>                 this.modal              = modal;
>                 this.attribute  = attribute;
>         } else {
>                 setEnabled(false);
>         }
>         ApiLog.debug("%s history link is %s%n", attribute, isEnabled() ?
> "enabled" : "disabled");
> }
>
> //-----------------------------------------------------------------------------------------------
> @Override public boolean isActionAuthorized(final Component component,
> final Action action) {
>         return true;
> }
>
> //-----------------------------------------------------------------------------------------------
> @Override public <T extends Component> boolean isInstantiationAuthorized
>         (final Class<T> componentClass) {
>         return true;
> }
>
> //-----------------------------------------------------------------------------------------------
> @Override public void onClick(final AjaxRequestTarget ajax) {
>         ajax.addListener(RemovePleaseWaitAjaxListener.getInstance());
>         modal.show(track, attribute, ajax);
> }
>
> //-----------------------------------------------------------------------------------------------
> }
>
>
> **
>
> This email and any attachments may contain information that is
> confidential and/or privileged for the sole use of the intended recipient.
> Any use, review, disclosure, copying, distribution or reliance by others,
> and any forwarding of this email or its contents, without the express
> permission of the sender is strictly prohibited by law.  If you are not the
> intended recipient, please contact the sender immediately, delete the
> e-mail and destroy all copies.
> **
>

Reply via email to