For systems with a lot of simple forms, I've tended to go the XML route -
- define XML files for the information and any work flow for each form
- create XSLT to generate Java/XHTML/whatever code to run the forms on desktop PC/mobile/web
- also create XSLT to generate source code data objects etc.
You can use XForms and implementations thereof, but usually I've been working in places where buying in solutions takes longer than building your own simple XSLT. It generally takes a week to get everything up and running if there aren't too many specialised widgets in the forms. If you make your own code generators, you have full control. If you find you want to switch all your forms from scrolling up/down to be presented in columns, then there is just one place you have to change, rather than changing each form's implementation. (though you could make a framework to abstract form information from presentation in Java, it's not well suited to such declarative programming)