001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020 package org.apache.myfaces.tobago.taglib.extension; 021 022 import org.apache.myfaces.tobago.TobagoConstants; 023 import org.apache.myfaces.tobago.apt.annotation.ExtensionTag; 024 import org.apache.myfaces.tobago.apt.annotation.Tag; 025 import org.apache.myfaces.tobago.component.ComponentUtil; 026 import org.apache.myfaces.tobago.component.UICommand; 027 import org.apache.myfaces.tobago.taglib.component.AbstractCommandTagDeclaration; 028 import org.apache.myfaces.tobago.taglib.component.MenuCommandTag; 029 import org.apache.myfaces.tobago.taglib.component.SelectOneRadioTag; 030 import org.apache.myfaces.tobago.taglib.decl.HasConverter; 031 import org.apache.myfaces.tobago.taglib.decl.HasIdBindingAndRendered; 032 import org.apache.myfaces.tobago.taglib.decl.HasLabel; 033 import org.apache.myfaces.tobago.taglib.decl.HasValue; 034 import org.apache.myfaces.tobago.taglib.decl.IsDisabled; 035 036 import javax.faces.component.UIComponent; 037 import javax.faces.el.ValueBinding; 038 import javax.faces.webapp.FacetTag; 039 import javax.servlet.jsp.JspException; 040 import javax.servlet.jsp.tagext.BodyTagSupport; 041 042 /* 043 * Date: 09.05.2006 044 * Time: 17:41:39 045 */ 046 047 /** 048 * Renders a submenu with select one items (like a radio button). 049 */ 050 051 @Tag(name = "menuRadio", tagExtraInfoClassName = "org.apache.myfaces.tobago.taglib.component.CommandTagExtraInfo") 052 @ExtensionTag(baseClassName = "org.apache.myfaces.tobago.taglib.component.MenuRadioTag") 053 public class MenuRadioExtensionTag extends BodyTagSupport implements AbstractCommandTagDeclaration, 054 HasIdBindingAndRendered, HasLabel, IsDisabled, HasValue, HasConverter { 055 056 private String rendered; 057 private String value; 058 059 private MenuCommandTag menuCommandTag; 060 private SelectOneRadioTag selectOneRadio; 061 private FacetTag facetTag; 062 private String action; 063 private String actionListener; 064 private String onclick; 065 private String link; 066 private String resource; 067 private String jsfResource; 068 private String disabled; 069 private String binding; 070 private String label; 071 private String immediate; 072 private String transition; 073 private String converter; 074 075 @Override 076 public int doStartTag() throws JspException { 077 078 menuCommandTag = new MenuCommandTag(); 079 menuCommandTag.setPageContext(pageContext); 080 menuCommandTag.setParent(getParent()); 081 082 if (rendered != null) { 083 menuCommandTag.setRendered(rendered); 084 } 085 if (action != null) { 086 menuCommandTag.setAction(action); 087 } 088 if (actionListener != null) { 089 menuCommandTag.setActionListener(actionListener); 090 } 091 if (onclick != null) { 092 menuCommandTag.setOnclick(onclick); 093 } 094 if (link != null) { 095 menuCommandTag.setLink(link); 096 } 097 if (resource != null) { 098 menuCommandTag.setResource(resource); 099 } 100 if (jsfResource != null) { 101 menuCommandTag.setJsfResource(jsfResource); 102 } 103 if (disabled != null) { 104 menuCommandTag.setDisabled(disabled); 105 } 106 if (binding != null) { 107 menuCommandTag.setBinding(binding); 108 } 109 if (label != null) { 110 menuCommandTag.setLabel(label); 111 } 112 if (immediate != null) { 113 menuCommandTag.setImmediate(immediate); 114 } 115 if (transition != null) { 116 menuCommandTag.setTransition(transition); 117 } 118 menuCommandTag.doStartTag(); 119 120 facetTag = new FacetTag(); 121 facetTag.setPageContext(pageContext); 122 facetTag.setParent(menuCommandTag); 123 facetTag.setName(org.apache.myfaces.tobago.TobagoConstants.FACET_ITEMS); 124 125 facetTag.doStartTag(); 126 selectOneRadio = new SelectOneRadioTag(); 127 selectOneRadio.setPageContext(pageContext); 128 selectOneRadio.setParent(facetTag); 129 if (converter != null) { 130 selectOneRadio.setConverter(converter); 131 } 132 if (value != null) { 133 selectOneRadio.setValue(value); 134 } 135 selectOneRadio.doStartTag(); 136 137 return super.doStartTag(); 138 } 139 140 @Override 141 public int doEndTag() throws JspException { 142 143 // Move attribute renderedPartially from selectOne to menuCommand component 144 UIComponent selectOneComponent = selectOneRadio.getComponentInstance(); 145 UICommand command = (UICommand) menuCommandTag.getComponentInstance(); 146 ValueBinding binding = selectOneComponent.getValueBinding(TobagoConstants.ATTR_RENDERED_PARTIALLY); 147 if (binding != null) { 148 command.setValueBinding(TobagoConstants.ATTR_RENDERED_PARTIALLY, binding); 149 } else { 150 Object renderedPartially = selectOneComponent.getAttributes().get(TobagoConstants.ATTR_RENDERED_PARTIALLY); 151 ComponentUtil.setRenderedPartially(command, (String) renderedPartially); 152 } 153 154 selectOneRadio.doEndTag(); 155 facetTag.doEndTag(); 156 menuCommandTag.doEndTag(); 157 158 return super.doEndTag(); 159 } 160 161 public void setAction(String action) { 162 this.action = action; 163 } 164 165 public void setActionListener(String actionListener) { 166 this.actionListener = actionListener; 167 } 168 169 public void setOnclick(String onclick) { 170 this.onclick = onclick; 171 } 172 173 public void setLink(String navigate) { 174 this.link = navigate; 175 } 176 177 public void setResource(String resource) { 178 this.resource = resource; 179 } 180 181 public void setJsfResource(String jsfResource) { 182 this.jsfResource = jsfResource; 183 } 184 185 public void setBinding(String binding) throws JspException { 186 this.binding = binding; 187 } 188 189 public void setRendered(String rendered) { 190 this.rendered = rendered; 191 } 192 193 public void setDisabled(String disabled) { 194 this.disabled = disabled; 195 } 196 197 public void setValue(String value) { 198 this.value = value; 199 } 200 201 public void setLabel(String label) { 202 this.label = label; 203 } 204 205 public void setImmediate(String immediate) { 206 this.immediate = immediate; 207 } 208 209 public void setTransition(String transition) { 210 this.transition = transition; 211 } 212 213 public void setConverter(String converter) { 214 this.converter = converter; 215 } 216 217 @Override 218 public void release() { 219 super.release(); 220 rendered = null; 221 value = null; 222 action = null; 223 actionListener = null; 224 onclick = null; 225 link = null; 226 resource = null; 227 jsfResource = null; 228 disabled = null; 229 binding = null; 230 label = null; 231 immediate = null; 232 transition = null; 233 converter = null; 234 menuCommandTag = null; 235 facetTag = null; 236 selectOneRadio = null; 237 } 238 239 }