Welcome,

I was testing our application and came across something that potentially may be an issue. When a component is disabled it shouldn't (or so I think) accept model changes. However the only thing that Wicket does (unless I am largly mistaken) is remove the ajax actions etc., but model still can be updated. Imagine a following scenario:

- user has an enabled component with onblur updating behaviour
- user copies the link from said event
- certain ajax action disables the component
- user enables the component, changes its value and manually invokes the js snippet copied from onblur event

I thought that the planned scenario would be for Wicket to ignore such action. In AjaxFormComponentUpdatingBehavior#onEvent(final AjaxRequestTarget target) FormComponent#inputChanged() is invoked. It tests for visibility and component being enabled. If it isn't it won't change rawInput. So far so good. However not much further in onEvent method FormComponent#validate() is invoked. In it convertInput fromt eh same class is invoked. convertInput gets the value from getInputAsArray(). I would think that this is the place where it should get the rawInput (especially since that rawInput is retrieved from this method in inputChanged method).

I can imagine that the same would be viable for non-ajaxy way, but haven't tested it. However FormComponent#processInput() has the same trait: invokes inputChanged() and the validate() so this could lead to the same error.

If this behaviour is intended it should be IMO explicitly stated that disabling a component doesn't disable it on a server side. If it is I guess it would be just a minor mistake of not using rawInput in valdiate method.

Whatdayathink?

Reply via email to