001// Copyright 2007, 2011 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007// http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014
015package org.apache.tapestry5.corelib.mixins;
016
017import org.apache.tapestry5.annotations.InjectContainer;
018import org.apache.tapestry5.annotations.AfterRender;
019import org.apache.tapestry5.ClientElement;
020
021/**
022 * Forces a client element to render its client id by ensuring that
023 * {@link org.apache.tapestry5.ClientElement#getClientId() ClientElement#getClientId()}
024 * is called. This is sometimes needed because, by design, most components (those that
025 * implement {@link ClientElement}) only render a client-side ID if their getClientId
026 * method is called sometime during the server-side DOM render.
027 * <p/>
028 * See the {@link org.apache.tapestry5.corelib.components.Any Any} component
029 * for an example of use.
030 * 
031 * @tapestrydoc
032 */
033public class RenderClientId
034{
035    @InjectContainer
036    private ClientElement element;
037
038    @AfterRender
039    void ensureId()
040    {
041        element.getClientId();
042    }
043}