This is no SEAM-specific question. Check the target attribute of the <h:commandLink>:
Name of a frame where the resource retrieved via this hyperlink is to be displayed.
Catch: <h:commandButton> has no target attribute! Therefore you will have to use <h:commandLink> and style the link produced with CSS into looking like a button.
As for alternatives to frames, you could use Facelets compositions (very powerful) coupled with partial updates, so that server load, network traffic and UI responsiveness looks as if one frame only was updated. The <a4j:region> tag in the template may prove useful.