+1 IMHO a good solution.
Have fun Sven On 19.04.2016 19:43, Andrew Geery wrote:
1. Create a Wicket Behavior that encapsulates your requirement. Maybe something like this: public class DisableWhenFilledBehavior extends Behavior { @Override public void onConfigure(Component component) { component.setEnabled(component.getDefaultModel() == null); } } 2. Add the behavior to all of the components in your form. Something like this: Component myComp = new TextField<>("project", new PropertyModel<Integer>(getModelObject(), "project")).add(new DisableWhenFilledBehavior ()); 3. After you handle the submission (e.g., persist the values to the db), ask Wicket to re-render your form (or panel or page). When Wicket re-renders the form, it will re-execute the DisableWhenFilledBehavior#onConfigure method against every component that the behavior has been added to and, thus, recompute whether each component is enabled or disabled. form = new Form<>(...); ... new AjaxButton(...) { public void onSubmit(AjaxRequestTarget target, Form<?> form) { // handle the values target.add(form); } } The other nice thing is that if the component is marked as disabled on the server and the client, for whatever reason, submits a value, Wicket will ignore it. The framework is taking care of that for you; you don't need to worry about it. Thanks Andrew On Tue, Apr 19, 2016 at 1:28 PM, sub es <[email protected]> wrote:In my opinion one should always validate inputs coming from a submit even if the inputs were disabled. Using tools like firebug, one can easily change values of disabled inputs and submit those changed values. Atleast I don't know about wicket not submitting disabled inputs, though I would not expect that behavior and would not rely on it. Best regards, Edwin Ursprüngliche Nachricht Von:[email protected] Gesendet:19. April 2016 7:18 nachm. An:[email protected] Antworten:[email protected] Betreff:Component disabled if it contains data Hello, I'm using Wicket 6, with Java 1.7. I'm new to Wicket and I would like to know what is the best way to implement the following: -I have a webpage with several input fields bound to a db table, and a submit button. - two of the fields can be empty when submitting the changes to the db. - however, if the fields are filled once, after submitting the page, the user should not be allowed anymore to change the values(even if leaves and reenters the page for the same registrations) Could you please tell me what is the best way to achieve this? What I have done so far is: - on the page load, when the wicket components are added to the page, I check if the db fields have values, and if they do, then I set the components to disabled: Component myComp = new TextField<Integer>("project", new PropertyModel<Integer>(getModelObject(), "project")); if (getModelObject().getProject() != null) myComp.setEnabled(false); dtForm.add(myComp ).add(RangeValidator.<Integer>range(0, 999999999)); - also on submit, I check if I have a value in my component and if yes, set the component to disable: if (getModelObject().getProject() != null ){ Component myComp = get("project"); if (myComp.isEnabled()){ myComp.setEnabled(false); dtForm.replace(tf); } } what bothers me is that I need to do all the validation again in the submit button, every time the submit will be pressed. Is there a better way? Thank you -- View this message in context: http://apache-wicket.1842946.n4.nabble.com/Component-disabled-if-it-contains-data-tp4674313.html Sent from the Users forum mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
--------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
