| Subcribe via RSS

Ubuntu 8.4

April 27th, 2008 | No Comments | Posted in General, Linux

Rather than write something about programming this week i’ve decided to upgrade my pc and laptop to the latest version of Ubuntu which was released the other day.

So far everything seems to be working fine and i’ve been messing around with new themes most of the time because I don’t really like the default orange theme that ubuntu ships with.

I’ve settled with the ubuntu-studio theme with a different icon set.

For those like me that love playing around with themes then I would recommend that you install the Gnome Art Manager.  This is a little program that makes it easy to browse and install different bits for your Gnome UI.

sudo apt-get install gnome-art

Thats it for now, I will do a proper programming post some time in the week, and probably a zoomf update post too!

Tags: ,

Wicket-Guice and Warp-Persist

April 19th, 2008 | 4 Comments | Posted in Guice, Wicket

This week I came across Warp-Persist, which provides transactional persistence support with Google Guice and Hibernate. To be honest its quite like what Spring provides, but via Guice, which means no nasty XML config files (except for the hibernate one if desired).

I had already been looking at the wicket-guice project which provides support for Guice in Wicket.

The best place to start with integrating these components would be Peter Mularien’s blog post on integrating warp-persist and wicket (but not wicket-guice). Peter’s post, while good, does not cover all of the things that I had to do to get everything working.

  1. Add the wicket-guice jar file to your project, if you are using maven then you can easily add the dependancy to your pom.xml file, if not then I think the right jar files (you need wicket-ioc.jar too) are come with the wicket download.
  2. Also add the warp-persist jar file which can be obtained here (You don’t have to checkout and build the code yourself). I couldn’t find a maven repo with the warp-persist jar in it so If anyone can point me to one I would be grateful.
  3. You will also need the AOP alliance jar file, or you can add it to your maven pom.xml.
  4. In your WebApplication.init() method add the call to the GuiceComponentInjector:
    injector = Guice.createInjector(PersistenceService.usingHibernate()
    .across(UnitOfWork.REQUEST).transactedWith(
    TransactionStrategy.LOCAL).buildModule(),
    new MyApplicationModule());
    addComponentInstantiationListener(new GuiceComponentInjector(this, injector));

    Make sure that you pass your injector into the GuiceComponentInjector constructor, otherwise things dont work later on (this took me several hours to figure out :) )

  5. Follow the rest of Peters instructions
  6. But make sure that you put the Warp-Filter before the Wicket-Filter. Putting it after did not work for me, its possible that the warp-persist code has changed between Peter’s post and now, or that wicket-juice causes something to go wrong.
  7. Thats it. You can get a guice injected hibernate session like this:
    @Inject Provider<Session> session;
    @Transactional
    public void save(T object)
    {
    session.get().saveOrUpdate(object);
    }

    Wherever you need it.

So now you should have a nice warped guicy wicket app (sorry couldn’t resist)

Next time, integrating dynamic finders.

Tags: , , ,

How to stop non-ajax form submits in wicket

April 5th, 2008 | 1 Comment | Posted in Javascript, Wicket

The situation:

You have a form with a single input box and an ajax submit link or button, much like the main search box on google or zoomf.

The problem:

If you type in the input box and press return the form gets submitted automatically. Firefox does this by simulating a click on the first button it finds in the form, which is OK. IE does this by just submitting the form, which is bad as it ruins the functionality of your form. If you have an AjaxSubmitLink rather than button even Firefox cant get it right.

The solution:

Use prototype to intercept the submit event of the form, stop the event, and fire the onclick event of your ajax button/link.

$('formId').observe('submit', function(e){ Event.stop(e); $('submitId').onclick(null);});

A wicketifed solution:

Wrap this up in a wicket behaviour so it can be resued.

import org.apache.wicket.Component;
import org.apache.wicket.behavior.AbstractBehavior;
import org.apache.wicket.markup.html.IHeaderResponse;

public class StopFormSubmitBehaviour extends AbstractBehavior {

private Component submitButton;
private Component form;

public StopFormSubmitBehaviour(Component submitButton)
{
this.submitButton = submitButton;
submitButton.setOutputMarkupId(true);
}

@Override
public void bind(Component component) {
super.bind(component);
component.setOutputMarkupId(true);
this.form = component;
}

@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.renderOnDomReadyJavascript(getScript());
}

protected String getScript()
{
StringBuilder js = new StringBuilder();
js.append("$('").append(form.getMarkupId()).append("').observe('submit', function(e){
Event.stop(e); $('")
.append(submitButton.getMarkupId()).append("').onclick(null);});");
return js.toString();
}
}

In action:

Form form = new Form("f");
form.add(new TextField("i"));
AjaxSubmitLink b;
form.add(b = new AjaxSubmitLink("b"){
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
}
});
add(form);
form.add(new StopFormSubmitBehaviour(b));
Tags: , , ,
View Richard Wilkinson's profile on LinkedIn