Jean, there are two scenarios I usually come about in these cases.
One is the session scoped bean and the other is the request scoped bean. In the case of session scoped beans I use the setProperty call to init the bean. In that sense I do a "No no" of beans which is include some sort of business logic in the setId call. Thus I use the existence of a GET variable as a means to signal and initialize the page or application. It isn't orthodox, but it works. Since the setProperty will not be called if the GET variable isn't set the application is only initialized once.
For example in your scenario I would use the setProperty to call setId only when ?id=46 exists on the URL. The setId method accesses the database and loads cliend 46 and displays it. All work will be done on client 46 since the bean is session scoped and the ID need not be set again.
The other case is the request scope. In such a case the ID will be forgotten between requests (well actually the whole bean). So I use hidden variables. I call the use Bean and setProperty early in the
JSP. After that a managed bean exists of name clientBean (to put a name on it). Within the form it is valid now to do ...
Your ID value will now be propagated through succesive posts.