maybe I donn't understand what you're trying to do, but the commandLink action calls the method which sets the product id and after that it calls the open script. The additional action param shouldn't be necessary in this case, or am I missing something.
try to add the reRender attribute to your commandLink:
Then open the modalPanel in the onComplete method. The panel should be rendered after the parameter is set. Leo is right, the actionparam isn't necessary.
rerendering indeed does the trick ! thanks!
I knew that the actionParam was another approach, but I got that from an example, so I just kept it there so you'd see the entire call I created.