Hi there,
I think everyone's kids can be ungrateful on occasion, but I'm guessing that you wouldn't have posted this if it were a one time thing. Your boys are the exact same age as my son (4) and daughter (2), and I, too, have had to correct their ungrateful behaviors. I like to think that my corrections have helped to shape the decent and polite young people they, but who knows, maybe I got lucky. ;-) Anyhow, my approach would be one of the following:
First, I am proponent of 1-2-3 Magic. My babysitter turned me on to it. (I am a working mom too.) This entails no discussion, but counting and time outs. When a kid whines, or acts improperly (or annoyingly), I say "1". Wait 5 seconds. If he/she persist, "2". Wait 5. Then, "3." Time out. I scoop up the kid and place them in their room (because they will never go willingly) for the number of minutes of their age. When I tell them to come out, I do not discuss anything, I let them rejoin the activities of the time. This approach allows them to learn to correct their behavior while still saving face.
Another thing I might do is talk about the expense of the trip, and how lucky we were to go, and how others don't ever get to travel. Basically, count your blessings and realized you are so.
Nonetheless, the message needs to be sent firmly and consistently that this type of response will not be tolerated, it is inappropriate and rude.
I guess I just pick and choose the approach depending on what I think they will be most responsive to in the moment, but I use 1-2-3 quite a bit and it is truly effective.
One last note, it could be that they just don't know how to communicate what it is they are truly feeling. They are noticing that things are different on this trip from the last time they went, and you could simply point out to them a better way to say that, explaining that while you know them and what they mean but if they spoke that way to others, they would hurt their feelings.
I hope something here will work for you.