If your geometry is a NURBS object you can set the Geometry as a goal and then add GoalU and GoalV to the particle object and set them according to where on the geo you want the particles to go.
With polygons, I've done the same type of thing using a hair follicle, since it stays right on the surface.
In other words, select your geo and do a create hair[] with 1 for U count and 1 for V count. (you can delete the hair itself, you just need the follicle) Then select the follicle and adjust it's "Parameter U" and "Parameter V" so it is in the spot you want it. Then you can use the follicle as a parent for your locator.
If you'd rather, there are few "rivet" scripts on here that also do what you want (MEL and Python). Just do a search for "rivet" and a few will come up.
Hope that helps!
-P