| package org.apache.myfaces.tobago.internal.taglib.extension; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import org.apache.myfaces.tobago.apt.annotation.DynamicExpression; |
| import org.apache.myfaces.tobago.apt.annotation.ExtensionTag; |
| import org.apache.myfaces.tobago.apt.annotation.Tag; |
| import org.apache.myfaces.tobago.apt.annotation.TagAttribute; |
| import org.apache.myfaces.tobago.apt.annotation.UIComponentTagAttribute; |
| import org.apache.myfaces.tobago.internal.taglib.SelectOneChoiceTag; |
| |
| import javax.servlet.jsp.JspException; |
| |
| /** |
| * Render a single selection dropdown list with a label. |
| */ |
| |
| @Tag(name = "selectOneChoice") |
| @ExtensionTag(baseClassName = "org.apache.myfaces.tobago.internal.taglib.SelectOneChoiceTag") |
| public class SelectOneChoiceExtensionTag extends TobagoExtensionBodyTagSupport { |
| |
| private javax.el.ValueExpression required; |
| private javax.el.ValueExpression value; |
| private javax.el.MethodExpression valueChangeListener; |
| private javax.el.ValueExpression disabled; |
| private javax.el.ValueExpression readonly; |
| private javax.el.ValueExpression onchange; |
| private javax.el.ValueExpression inline; |
| private javax.el.ValueExpression label; |
| private javax.el.ValueExpression rendered; |
| private javax.el.ValueExpression binding; |
| private javax.el.ValueExpression tip; |
| private javax.el.MethodExpression validator; |
| private javax.el.ValueExpression converter; |
| private javax.el.ValueExpression labelWidth; |
| private javax.el.ValueExpression tabIndex; |
| private javax.el.ValueExpression focus; |
| private javax.el.ValueExpression markup; |
| private javax.el.ValueExpression validatorMessage; |
| private javax.el.ValueExpression converterMessage; |
| private javax.el.ValueExpression requiredMessage; |
| private String fieldId; |
| |
| private LabelExtensionTag labelTag; |
| private SelectOneChoiceTag selectOneChoiceTag; |
| |
| @Override |
| public int doStartTag() throws JspException { |
| |
| labelTag = new LabelExtensionTag(); |
| labelTag.setPageContext(pageContext); |
| if (id != null) { |
| labelTag.setId(id); |
| } |
| if (label != null) { |
| labelTag.setValue(label); |
| } |
| if (tip != null) { |
| labelTag.setTip(tip); |
| } |
| if (rendered != null) { |
| labelTag.setRendered(rendered); |
| } |
| if (labelWidth != null) { |
| labelTag.setColumns(createStringValueExpression(labelWidth.getExpressionString() + ";*")); |
| } |
| if (markup != null) { |
| labelTag.setMarkup(markup); |
| } |
| labelTag.setParent(getParent()); |
| labelTag.setJspId(jspId + PREFIX + idSuffix++); |
| labelTag.doStartTag(); |
| |
| selectOneChoiceTag = new SelectOneChoiceTag(); |
| selectOneChoiceTag.setPageContext(pageContext); |
| if (value != null) { |
| selectOneChoiceTag.setValue(value); |
| } |
| if (valueChangeListener != null) { |
| selectOneChoiceTag.setValueChangeListener(valueChangeListener); |
| } |
| if (validator != null) { |
| selectOneChoiceTag.setValidator(validator); |
| } |
| if (converter != null) { |
| selectOneChoiceTag.setConverter(converter); |
| } |
| if (binding != null) { |
| selectOneChoiceTag.setBinding(binding); |
| } |
| if (onchange != null) { |
| selectOneChoiceTag.setOnchange(onchange); |
| } |
| if (disabled != null) { |
| selectOneChoiceTag.setDisabled(disabled); |
| } |
| if (markup != null) { |
| selectOneChoiceTag.setMarkup(markup); |
| } |
| if (inline != null) { |
| selectOneChoiceTag.setInline(inline); |
| } |
| if (focus != null) { |
| selectOneChoiceTag.setFocus(focus); |
| } |
| if (fieldId != null) { |
| selectOneChoiceTag.setId(fieldId); |
| } |
| if (label != null) { |
| selectOneChoiceTag.setLabel(label); |
| } |
| if (readonly != null) { |
| selectOneChoiceTag.setReadonly(readonly); |
| } |
| if (required != null) { |
| selectOneChoiceTag.setRequired(required); |
| } |
| if (tabIndex != null) { |
| selectOneChoiceTag.setTabIndex(tabIndex); |
| } |
| if (validatorMessage != null) { |
| selectOneChoiceTag.setValidatorMessage(validatorMessage); |
| } |
| if (converterMessage != null) { |
| selectOneChoiceTag.setConverterMessage(converterMessage); |
| } |
| if (requiredMessage != null) { |
| selectOneChoiceTag.setRequiredMessage(requiredMessage); |
| } |
| selectOneChoiceTag.setParent(labelTag); |
| selectOneChoiceTag.setJspId(jspId + PREFIX + idSuffix++); |
| selectOneChoiceTag.doStartTag(); |
| |
| return super.doStartTag(); |
| } |
| |
| @Override |
| public int doEndTag() throws JspException { |
| selectOneChoiceTag.doEndTag(); |
| labelTag.doEndTag(); |
| return super.doEndTag(); |
| } |
| |
| @Override |
| public void release() { |
| super.release(); |
| binding = null; |
| onchange = null; |
| disabled = null; |
| inline = null; |
| label = null; |
| labelWidth = null; |
| converter = null; |
| validator = null; |
| readonly = null; |
| rendered = null; |
| required = null; |
| tip = null; |
| value = null; |
| valueChangeListener = null; |
| tabIndex = null; |
| selectOneChoiceTag = null; |
| labelTag = null; |
| focus = null; |
| markup = null; |
| validatorMessage = null; |
| converterMessage = null; |
| requiredMessage = null; |
| fieldId = null; |
| } |
| |
| /** |
| * Flag indicating that a value is required. |
| * If the value is an empty string a |
| * ValidationError occurs and a Error Message is rendered. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(type = "boolean", defaultValue = "false") |
| public void setRequired(javax.el.ValueExpression required) { |
| this.required = required; |
| } |
| |
| /** |
| * The current value of this component. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(type = "java.lang.Object") |
| public void setValue(javax.el.ValueExpression value) { |
| this.value = value; |
| } |
| |
| /** |
| * MethodBinding representing a value change listener method |
| * that will be notified when a new value has been set for this input component. |
| * The expression must evaluate to a public method that takes a ValueChangeEvent |
| * parameter, with a return type of void. |
| * |
| * @param valueChangeListener |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute( |
| type = {}, |
| expression = DynamicExpression.METHOD_BINDING_REQUIRED, |
| methodSignature = "javax.faces.event.ValueChangeEvent") |
| public void setValueChangeListener(javax.el.MethodExpression valueChangeListener) { |
| this.valueChangeListener = valueChangeListener; |
| } |
| |
| /** |
| * A method binding EL expression, |
| * accepting FacesContext, UIComponent, |
| * and Object parameters, and returning void, that validates |
| * the component's local value. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(type = {}, |
| expression = DynamicExpression.METHOD_BINDING, |
| methodSignature = { "javax.faces.context.FacesContext", "javax.faces.component.UIComponent", "java.lang.Object" }) |
| public void setValidator(javax.el.MethodExpression validator) { |
| this.validator = validator; |
| } |
| |
| /** |
| * Flag indicating that this element is disabled. |
| */ |
| @TagAttribute() |
| @UIComponentTagAttribute(type = "boolean", defaultValue = "false") |
| public void setDisabled(javax.el.ValueExpression disabled) { |
| this.disabled = disabled; |
| } |
| |
| /** |
| * Flag indicating that this component will prohibit changes by the user. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(type = "boolean", defaultValue = "false") |
| public void setReadonly(javax.el.ValueExpression readonly) { |
| this.readonly = readonly; |
| } |
| |
| /** |
| * Clientside script function to add to this component's onchange handler. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute() |
| public void setOnchange(javax.el.ValueExpression onchange) { |
| this.onchange = onchange; |
| } |
| |
| /** |
| * An expression that specifies the Converter for this component. |
| * If the value binding expression is a String, |
| * the String is used as an ID to look up a Converter. |
| * If the value binding expression is a Converter, |
| * uses that instance as the converter. |
| * The value can either be a static value (ID case only) |
| * or an EL expression. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(type = "javax.faces.convert.Converter", |
| expression = DynamicExpression.VALUE_BINDING) |
| public void setConverter(javax.el.ValueExpression converter) { |
| this.converter = converter; |
| } |
| |
| /** |
| * Flag indicating this component should rendered as an inline element. |
| * @deprecated This should be handled by e.g. a flow layout manager (since 1.5.0) |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(type = "boolean", defaultValue = "false") |
| @Deprecated |
| public void setInline(javax.el.ValueExpression inline) { |
| this.inline = inline; |
| } |
| |
| /** |
| * Text value to display as label. |
| * If text contains an underscore the next character is used as accesskey. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute() |
| public void setLabel(javax.el.ValueExpression label) { |
| this.label = label; |
| } |
| |
| /** |
| * Flag indicating whether or not this component should be rendered |
| * (during Render Response Phase), or processed on any subsequent form submit. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(type = "boolean", defaultValue = "true") |
| public void setRendered(javax.el.ValueExpression rendered) { |
| this.rendered = rendered; |
| } |
| |
| /** |
| * The value binding expression linking this |
| * component to a property in a backing bean. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(type = "javax.faces.component.UIComponent") |
| public void setBinding(javax.el.ValueExpression binding) { |
| this.binding = binding; |
| } |
| |
| /** |
| * Text value to display as tooltip. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute() |
| public void setTip(javax.el.ValueExpression tip) { |
| this.tip = tip; |
| } |
| |
| /** |
| * The width for the label component. Default: 'auto'. |
| * This value is used in the gridLayouts columns attribute. |
| * See gridLayout tag for valid values. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute() |
| public void setLabelWidth(javax.el.ValueExpression labelWidth) { |
| this.labelWidth = labelWidth; |
| } |
| |
| @TagAttribute |
| @UIComponentTagAttribute(type = "java.lang.Integer") |
| public void setTabIndex(javax.el.ValueExpression tabIndex) { |
| this.tabIndex = tabIndex; |
| } |
| |
| /** |
| * Flag indicating this component should receive the focus. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(type = "boolean", defaultValue = "false") |
| public void setFocus(javax.el.ValueExpression focus) { |
| this.focus = focus; |
| } |
| |
| /** |
| * Indicate markup of this component. |
| * Possible value is 'none'. But this can be overridden in the theme. |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute(defaultValue = "none", type = "java.lang.String[]") |
| public void setMarkup(javax.el.ValueExpression markup) { |
| this.markup = markup; |
| } |
| |
| /** |
| * An expression that specifies the validator message |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute() |
| public void setValidatorMessage(javax.el.ValueExpression validatorMessage) { |
| this.validatorMessage = validatorMessage; |
| } |
| |
| /** |
| * An expression that specifies the converter message |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute() |
| public void setConverterMessage(javax.el.ValueExpression converterMessage) { |
| this.converterMessage = converterMessage; |
| } |
| |
| /** |
| * An expression that specifies the required message |
| */ |
| @TagAttribute |
| @UIComponentTagAttribute() |
| public void setRequiredMessage(javax.el.ValueExpression requiredMessage) { |
| this.requiredMessage = requiredMessage; |
| } |
| |
| /** |
| * The component identifier for the input field component inside of the container. |
| * This value must be unique within the closest parent component that is a naming container. |
| */ |
| @TagAttribute(rtexprvalue = true) |
| @UIComponentTagAttribute |
| public void setFieldId(String fieldId) { |
| this.fieldId = fieldId; |
| } |
| |
| /** |
| * The component identifier for this component. |
| * This value must be unique within the closest parent component that is a naming container. |
| * For tx components the id will be set to the container (e. g. the panel). |
| * To set the id of the input field, you have to use the attribute "fieldId". |
| */ |
| @TagAttribute(rtexprvalue = true) |
| @UIComponentTagAttribute |
| public void setId(String id) { |
| super.setId(id); |
| } |
| } |