from what i understand, ehcache page caching uses a filter. try no to use the filter and see what happens.. my guess is that the first time you request the page, the filter does not have a cached copy and process the page properly. the second request, the page is already in the cache, some components get rendered, some do not. First render ( cached(item1), item2). Second render (item2). But item2 gets rendered with id item1.
another painful seguestion is to have all, all as in every component to have id="xxx", this is to prevent jsf from generating the id so its does not matter if you cache it or not. i'm probably shooting in the dark here.

