Try adding setting the outputMarkupPlaceholderTag.
patientAutoCompleteTextField.setOutputMarkupId( true );
patientAutoCompleteTextField.setVisible( false );
patient.setOutputMarkupPlaceholderTag(true);
and in your onUpdate
target.addComponent(patient)
that way you will not have to add the whole panel.
On 28/02/2008, Martin Funk <[EMAIL PROTECTED]> wrote:
> Hmmmm...
>
> not quit sure if I understood you. Just for the fun of it I rehacked a
> quickstart that might simulate you problem.
>
> But even if it does I'm not quite sure if its bug, or a feature.
> You add an AjaxFormComponentUpdatingBehavior to an AutoCompleteTextField.
> As long as the keyboard is used to select the value or to leave the
> TextField everything is fine its just that when the mouse is used to select
> an element in the dropdown the AjaxFormComponentUpdatingBehavior gets called
> twice.
>
> That's not without some plausibility.
> First a value is typed, so the field is changed and a dropdown is shown.
> Then the mouse clicks on an element in the dropdown, the textfield looses
> focus, so the first 'onchange' is fired.
> Then the pulldown value is inserted into the textfield, it is changed agan
> and possibly retains focus.
> Finally as the mouse clicked on the dropdown, so outside of the textfield it
> looses the focus again, second 'onchange' fired.
>
> Maybe someone else has more insight, and maybe something can be done in
> /wicket-autocomplete.js
>
> mf
>
> svn diff jdk-1.4/wicket-quickstart/src/
> Index: jdk-1.4
> /wicket-quickstart/src/main/java/org/apache/wicket/quickstart/Index.java
> ===================================================================
> ---
> jdk-1.4/wicket-quickstart/src/main/java/org/apache/wicket/quickstart/Index.java
> (Revision 632116)
> +++
> jdk-1.4/wicket-quickstart/src/main/java/org/apache/wicket/quickstart/Index.java
> (Arbeitskopie)
> @@ -16,7 +16,17 @@
> */
> package org.apache.wicket.quickstart;
>
> +import java.util.ArrayList;
> +import java.util.Arrays;
> +import java.util.Iterator;
> +
> import org.apache.wicket.PageParameters;
> +import org.apache.wicket.ajax.AjaxRequestTarget;
> +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
> +import
>
> org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField
> ;
> +import org.apache.wicket.markup.html.basic.Label;
> +import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.model.Model;
>
> /**
> * Basic bookmarkable index page.
> @@ -34,5 +44,36 @@
> */
> public Index(final PageParameters parameters)
> {
> + Form form = new Form("form")
> + {
> + protected void onSubmit()
> + {
> + System.out.println("submit");
> + }
> + };
> + add(form);
> + final AutoCompleteTextField af = new
> AutoCompleteTextField("field", new Model(""))
> + {
> + protected Iterator getChoices(String input)
> + {
> + String[] args = { "a", "b", "c" };
> + return new ArrayList(Arrays.asList
> (args)).iterator();
> + }
> + };
> + final Label label = new Label("label", "");
> + label.setOutputMarkupId(true);
> + add(label);
> + af.add(new AjaxFormComponentUpdatingBehavior("onchange")
>
> + {
> + private static final long serialVersionUID = 1L;
> +
> + public void onUpdate(AjaxRequestTarget target)
>
> + {
> + System.out.println("updated : " + " : " +
> af.getModelObjectAsString());
> + label.setModelObject(af.getModelObject());
> + target.addComponent(label);
> + }
> + });
> + form.add(af);
> }
> }
> Index: jdk-1.4
> /wicket-quickstart/src/main/java/org/apache/wicket/quickstart/Index.html
> ===================================================================
> ---
> jdk-1.4/wicket-quickstart/src/main/java/org/apache/wicket/quickstart/Index.html
> (Revision 632116)
> +++
> jdk-1.4/wicket-quickstart/src/main/java/org/apache/wicket/quickstart/Index.html
> (Arbeitskopie)
> @@ -5,6 +5,11 @@
> <body>
> <h1>QuickStart</h1>
> <p>This is your first Wicket application.</p>
> + <p wicket:id="label"></p>
> + <form wicket:id="form">
> + Text field: <input type="text" wicket:id="field" /><br/>
> + <input type="submit" value="Send
> to server" />
> + </form>
> </body>
> </html>
>
> 2008/2/26, Bushby <[EMAIL PROTECTED]>:
>
> >
> >
> > I have a panel which is backed by an over all CompoundPropertyModel. It
> > has
> > an inner panel which is my search panel and Labels. Here is the search
> > panel code.
> >
> > public class SearchPatientPanel extends Panel
> > {
> > private static final long serialVersionUID = 8413569236371190758L;
> > private PatientAutoCompleteTextField patientAutoCompleteTextField;
> > private Label searchLabel;
> > public SearchPatientPanel( String id )
> > {
> > super( id );
> > setOutputMarkupId( true );
> > final ModalWindow addPatientWindow;
> > add( addPatientWindow = new ModalWindow(
> > "addPatientWindow" ) );
> >
> > searchLabel = new Label( "searchLabel", "Enter any part of
> > the patient's
> > name." );
> > searchLabel.setOutputMarkupId( true );
> > searchLabel.setVisible( false );
> > add( searchLabel );
> >
> > patientAutoCompleteTextField = new
> > PatientAutoCompleteTextField(
> > "lastName", new PatientAutoCompleteTextRenderer(), addPatientWindow );
> > patientAutoCompleteTextField.setOutputMarkupId( true );
> > patientAutoCompleteTextField.setVisible( false );
> > add( patientAutoCompleteTextField );
> >
> > add( new AjaxLink( "search" )
> > {
> > private static final long serialVersionUID
> > = -6622359946182548552L;
> >
> > @Override
> > public void onClick( AjaxRequestTarget
> > target )
> > {
> >
> > SearchPatientPanel.this.patientAutoCompleteTextField.setVisible( true
> > );
> >
> > SearchPatientPanel.this.searchLabel.setVisible( true );
> > target.addComponent(
> > SearchPatientPanel.this );
> > }
> >
> > });
> > }
> >
> > public void hideSearch()
> > {
> > patientAutoCompleteTextField.setVisible( false );
> > patientAutoCompleteTextField.setModel( new Model() );
> > searchLabel.setVisible( false );
> > }
> > }
> >
> > The AutoCompleteTextField has an AjaxUpdatingBehavior.
> >
> > this.add( new AjaxFormComponentUpdatingBehavior(
> > "onchange" )
> > {
> >
> > private static final long serialVersionUID = 1L;
> >
> > public void onUpdate( AjaxRequestTarget target )
> > {
> >
> > String selectedPatient = getModelValue();
> > if( StringUtils.isNotEmpty( selectedPatient )
> > )
> > {
> > if( StringUtils.contains( selectedPatient,
> > "New Patient" ) )
> > {
> > System.out.println( "user wants to
> > create a new patient" );
> > addPatientWindow.show( target );
> > }
> > else
> > {
> > Patient patient = getPatient(
> > selectedPatient ) );
> > target.addComponent(
> > patientDataPanel );
> > hideSearch( target );
> > }
> > }
> >
> >
> > }
> > });
> >
> > I type a couple characters into the autocomplete and then select from the
> > list. The first time the onChange event is fired, I get the input. The
> > second time the event is fired I get the selected text.
> >
> > Thanks
> > Mike
> >
> >
> >
> > Martin Funk-3 wrote:
> > >
> > > Hi Michal,
> > >
> > > could you come up with some code?
> > >
> > > mf
> > >
> > > 2008/2/22, Bushby <[EMAIL PROTECTED]>:
> > >>
> > >>
> > >> I have an AutoCompleteTextField which searches for a person
> > object. When
> > >> a
> > >> person is selected from the auto complete, I want to update the panel
> > and
> > >> the model with the person's information. I have tried adding an
> > >> AjaxFormComponentUpdatingBehavior, but it gets called twice. Once with
> > >> the
> > >> text entered by the user, and the second with the text from the auto
> > >> complete. How do I capture just the selection event?
> > >>
> > >> Thanks
> > >>
> > >>
> > >> --
> > >> View this message in context:
> > >>
> >
> http://www.nabble.com/AutoCompleteTextField-user-selection-tp15634452p15634452.html
> > >> Sent from the Wicket - User mailing list archive at Nabble.com.
> > >>
> > >>
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> > >> For additional commands, e-mail: [EMAIL PROTECTED]
> > >>
> > >>
> > >
> > >
> >
> >
> > --
> > View this message in context:
> >
> http://www.nabble.com/AutoCompleteTextField-user-selection-tp15634452p15676689.html
> >
> > Sent from the Wicket - User mailing list archive at Nabble.com.
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
--
Ryan Gravener
http://ryangravener.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]