I think you may have two problems. The typical
pattern when returning a ModelAndView from a controller method is to resolve that view to a JSP (or some other view). Sometimes you need to do more processing or as you indicate, load a new form backing object. In that case you would put a redirect prefix on the view name. Something like:
Then your invocation path would be:
page1.jsp ->Submit -> controller.onSubmit -> redirect to controller2.formBackingObject() -> page2 (view w/frmPage2 as the model obj) -> page2.jsp (via view handler)
The other problem with page2 submit going to the same controller may have to do with the path you define for your action in the page2 form. It has to be a different path and that path has to be mapped to the new controller.