You can write a behaviour for it so it will be more reusable.
The following is based on
http://cwiki.apache.org/WICKET/request-focus-on-a-specific-form-component.html
and
works for both regular and ajax requests.

private final class MyLink extends AjaxFallbackLink
  {
          public void onClick(AjaxRequestTarget target)
      {
          onShowForm(target);
          myField.add(new FocusBehavior());
      }
  }

public class FocusBehavior extends AbstractBehavior
{
/**
 *
 */
private static final long serialVersionUID = 1L;

@Override
public void bind(Component component) {
super.bind(component);
component.setOutputMarkupId(true);
final Response response = component.getResponse();
if (response instanceof WebResponse && !((WebResponse)response).isAjax()) {
component.setComponentBorder(new IComponentBorder() {
/**
 *
 */
private static final long serialVersionUID = 1L;
 public void renderBefore(Component component) {
}
 public void renderAfter(Component component) {
final Response response = component.getResponse();
response.write(
"<script type=\"text/javascript\"
language=\"javascript\">document.getElementById(\"" +
component.getMarkupId() +
"\").focus()</script>");
}
});
}
this.component = component;
}
 private Component component;
 @Override
public void renderHead(IHeaderResponse response) {
if (response.getResponse() instanceof WebResponse &&
((WebResponse)response.getResponse()).isAjax()) {
response.renderOnLoadJavascript("document.getElementById('" +
component.getMarkupId() + "').focus()");
}

}

@Override
public boolean isTemporary() {
return true;
}
}

On Thu, Jan 29, 2009 at 4:07 PM, Philipp Daumke <dau...@averbis.de> wrote:

> Hi Michael,
>
> thanks for your help, but it doesn't work yet. My code:
>
> TextField myField = new TextField("text");
> myField.setOutputMarkupId(true);
> myField.setOutputMarkupPlaceholderTag(true);
> add(myField);
>
>   private final class MyLink extends AjaxFallbackLink
>   {
>           public void onClick(AjaxRequestTarget target)
>       {
>           onShowForm(target);
>           target.appendJavascript("getElementById('"+myField.getMarkupId()+
> "').focus()");
>       }
>   }
>
> Is there something obviously wrong? Correct Javascript syntax and semantic?
> Is there an alternative "wicket" approach so that I don't have to use
> Javascript myself?
> Thanks for help
> Philipp
>
>
>  use target.(pre|append)Javascript if you want additional JS executed
>> before/after doing the wicket-ajax stuff
>>
>> if you only want to set the focus (without any ajax involved), don't use
>> ajaxlink, use e.g. a simple WebmarkupContainer
>>
>> hth,
>> michael
>>
>>
>> Philipp Daumke-2 wrote:
>>
>>
>>> Dear all,
>>>
>>> I try to show and focus on a text field when clicking on a link. The
>>> focus however doesn't work. I tried to follow an example in cwiki (
>>> http://cwiki.apache.org/WICKET/calling-javascript-function-on-wicket-components-onclick.html)
>>> but I somehow do something wrong. I tried to add some javascript attribute
>>> via AttributeAppender, but then I get a null pointer exception in onClick
>>> ("target is null"). When I comment that line out (so don't add the
>>> Attribute), everything works fine except that focus doesn't work.
>>>
>>> Any help appreciated.
>>> Thanks a lot
>>> Philipp
>>>
>>> Here's my code:
>>>
>>> in a WebMarkupContainer:
>>> link.add(new AttributeAppender("onClick", new
>>> Model("getElementById('"+textfield.getMarkupId()+ "').onFocus();"), ";"));
>>>
>>> in my custom Link Class:
>>> public void onClick(AjaxRequestTarget target)
>>>        {
>>>            showFormThatContainsTextField(target);
>>>  }
>>>
>>> void showFormThatContainsTextField(AjaxRequestTarget target)
>>>    {
>>>        // toggle the visibility
>>>         ...
>>>        // redraw the add container.
>>>        target.addComponent(this);
>>>    }
>>>
>>> --
>>>
>>> Averbis GmbH
>>> c/o Klinikum der Albert-Ludwigs-Universität
>>> Stefan-Meier-Strasse 26
>>> D-79104 Freiburg
>>>
>>> Fon: +49 (0) 761 - 203 6707
>>> Fax: +49 (0) 761 - 203 6800
>>> E-Mail: dau...@averbis.de
>>>
>>> Geschäftsführer: Dr. med. Philipp Daumke, Kornél Markó
>>> Sitz der Gesellschaft: Freiburg i. Br.
>>> AG Freiburg i. Br., HRB 701080
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>
>>>
>>>
>>>
>>>
>>
>>
>> -----
>> Michael Sparer
>> http://techblog.molindo.at
>>
>>
>
>
> --
>
> Averbis GmbH
> c/o Klinikum der Albert-Ludwigs-Universität
> Stefan-Meier-Strasse 26
> D-79104 Freiburg
>
> Fon: +49 (0) 761 - 203 6707
> Fax: +49 (0) 761 - 203 6800
> E-Mail: dau...@averbis.de
>
> Geschäftsführer: Dr. med. Philipp Daumke, Kornél Markó
> Sitz der Gesellschaft: Freiburg i. Br.
> AG Freiburg i. Br., HRB 701080
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>


-- 
Matthew Rollins Hanlon
http://squareoftwo.org
_____________________
Hanlon's Razor:
"Never attribute to malice that which can be adequately explained by
stupidity."
http://wikipedia.org/wiki/Hanlon's_razor

Reply via email to