You should use the CONVERSATION scope and use flushMode = FlushModeType.MANUAL in the @Begin annotation, then you can explicitly call entityManager.flush() if you want yo save the data, otherwise you can do anything with the data you want to edit while you conversation is active.
Regarding your second question, I don't understand what you want to do. Maybe if you explain a bit else, I can help you.
You can get the view id with:
@In FacesContext facesContext; ... facesContext.getViewRoot().getViewId()