001 package org.apache.myfaces.tobago.example.reference;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one or more
005 * contributor license agreements. See the NOTICE file distributed with
006 * this work for additional information regarding copyright ownership.
007 * The ASF licenses this file to You under the Apache License, Version 2.0
008 * (the "License"); you may not use this file except in compliance with
009 * the License. You may obtain a copy of the License at
010 *
011 * http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020 import org.apache.myfaces.tobago.util.VariableResolverUtil;
021
022 import javax.servlet.jsp.tagext.TagSupport;
023 import javax.servlet.jsp.JspException;
024 import javax.faces.context.FacesContext;
025
026 public class DynamicTag extends TagSupport {
027
028 private String controllerName;
029 private TagSupport tag;
030
031 public int doStartTag() throws JspException {
032 // fixme: session?
033 Controller controller =
034 (Controller) VariableResolverUtil.resolveVariable(FacesContext.getCurrentInstance(), controllerName);
035 // Controller controller = (Controller) pageContext.getSession().getAttribute(controllerName);
036 if (controller != null) {
037 tag = controller.createTag();
038 tag.setPageContext(pageContext);
039 tag.setParent(getParent());
040 tag.doStartTag();
041 }
042 return super.doStartTag();
043 }
044
045 public int doEndTag() throws JspException {
046 if (tag != null) {
047 tag.doEndTag();
048 }
049 return super.doEndTag();
050 }
051
052 public String getController() {
053 return controllerName;
054 }
055
056 public void setController(String controller) {
057 this.controllerName = controller;
058 }
059 }