Friday, July 6, 2012

Tapestry Ajax Upload Fixin

Do you have problems with file uploading when using it with ajax requests?
The issue is that ajax file uploading isn't transparently supported. There are some approaches to solve this issue. I will use jQuery as client side framework and Tapestry5 as server side for all examples.

1. Using advantages of html5 http://www.w3.org/TR/XMLHttpRequest2/#interface-formdata

The main idea is to use special JS interface called FormData. We can create it from existing form element and it will copy all data from it or we can create empty FormData and fill it from scratch. Then we can use it in ajax request and it will work.

... in almost all modern browsers: Chrome 7+, FF 4.0, IE 10+(really?), Opera 12+, Safari 5+. But what about old browsers?

2. Using usual form submission in iframe.
The idea is to emulate asynchronous request via form submission in separate iframe. We just need to create iframe and form targeted to this iframe, attach file inputs to newly created form, copy input values from original form to new as hidden fields, and submit this form as usual. Response from server will be automatically loaded in iframe body.


In this case we should also improve server logic to think about such request as ajax request. And don't forget about escaping.

Wednesday, July 4, 2012

T5-Examples application moved to Heroku

Just moved my live demo to Heroku cloud application platform. Why I do so? Simple deploy - you just need to push code to heroku git repository and platform will do all remaining work for you. It will force maven build "mvn -B -DskipTests=true clean install" and then execute application instances configured in Procfile.
So, I have git repository on GitHub for my demo. I need to do some configuration to make it run on Heroku:
1. Sign Up
2. Install Heroku Toolbelt
3. Sign in and create new application

4. Link my existing git repository

5. Configure application runner. I use jetty runner for this as described in article. I need to make some enhancement in maven pom.xml:

And add file Procfile:

7. Push to Heroku git repository

8. Open app at http://<app-name>.herokuapp.com/

Now I have linked up my samples on GitHub with live demo on Heroku. All previous articles was updated respectively. It is time to not worry about deploying samples to some app server. It is time to work with code. And when time will come I just need to push it to heroku repository...
More about Heroku