It is not trivial to migrate Struts1 app to Struts2. I don't think Struts2 in being used mainly because of upgrades from Struts1.
But to describe why we picked Struts2 I have to describe how we discarded the rest:
We discarded JSF because it was simply too hard to work with. And the majority of components didn't act like real websites - for example opening multiple tabs will confuse a lot of components because they store state in the session. Have a look at http://ptrthomas.wordpress.com/2009/05/15/jsf-sucks/
We discard Tapestry because the learning curve is steep and it is generally a big PITA http://stackoverflow.com/questions/1303438/why-did-you-stop-using-tapestry/1304575#1304575
Wicket and Stripes looked promising but not quite mainstream enough. We weren't entirely ready to back on of those horses in the long term.
It became a toss-up between Struts2 and Spring MVC. Struts2 has really good support for Spring. In the end most developers felt more comfortable and productive with Struts2.
The framework is relatively simple in its design and it plays well with others - i.e. Spring, Hibernate, JQuery/JSON was easy to integrate with.