| /* |
| * 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. |
| */ |
| package javax.faces.component; |
| |
| import javax.faces.application.FacesMessage; |
| import javax.faces.context.FacesContext; |
| import javax.faces.el.EvaluationException; |
| import javax.faces.el.MethodBinding; |
| import javax.faces.el.ValueBinding; |
| import javax.faces.validator.Validator; |
| import javax.faces.validator.ValidatorException; |
| |
| /** |
| * A collection of static helper methods for component-related issues. |
| * |
| * @author Manfred Geiler (latest modification by $Author$) |
| * @version $Revision$ $Date$ |
| */ |
| class _ComponentUtils |
| { |
| private _ComponentUtils() {} |
| |
| static void callValidators(FacesContext context, UIInput input, Object convertedValue) |
| { |
| // first invoke the list of validator components |
| Validator[] validators = input.getValidators(); |
| for (int i = 0; i < validators.length; i++) |
| { |
| Validator validator = validators[i]; |
| try |
| { |
| validator.validate(context, input, convertedValue); |
| } |
| catch (ValidatorException e) |
| { |
| input.setValid(false); |
| FacesMessage facesMessage = e.getFacesMessage(); |
| if (facesMessage != null) |
| { |
| facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR); |
| context.addMessage(input.getClientId(context), facesMessage); |
| } |
| } |
| } |
| |
| // now invoke the validator method defined as a method-binding attribute |
| // on the component |
| MethodBinding validatorBinding = input.getValidator(); |
| if (validatorBinding != null) |
| { |
| try |
| { |
| validatorBinding.invoke(context, |
| new Object[] {context, input, convertedValue}); |
| } |
| catch (EvaluationException e) |
| { |
| input.setValid(false); |
| Throwable cause = e.getCause(); |
| if (cause instanceof ValidatorException) |
| { |
| FacesMessage facesMessage = ((ValidatorException)cause).getFacesMessage(); |
| if (facesMessage != null) |
| { |
| facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR); |
| context.addMessage(input.getClientId(context), facesMessage); |
| } |
| } |
| else |
| { |
| throw e; |
| } |
| } |
| } |
| } |
| |
| static String getStringValue(FacesContext context, ValueBinding vb) |
| { |
| Object value = vb.getValue(context); |
| if(value == null) |
| { |
| return null; |
| } |
| return value.toString(); |
| } |
| |
| static String getPathToComponent(UIComponent component) { |
| StringBuffer buf = new StringBuffer(); |
| |
| if(component == null) |
| { |
| buf.append("{Component-Path : "); |
| buf.append("[null]}"); |
| return buf.toString(); |
| } |
| |
| getPathToComponent(component,buf); |
| |
| buf.insert(0,"{Component-Path : "); |
| buf.append("}"); |
| |
| return buf.toString(); |
| } |
| |
| private static void getPathToComponent(UIComponent component, StringBuffer buf) |
| { |
| if(component == null) |
| return; |
| |
| StringBuffer intBuf = new StringBuffer(); |
| |
| intBuf.append("[Class: "); |
| intBuf.append(component.getClass().getName()); |
| if(component instanceof UIViewRoot) |
| { |
| intBuf.append(",ViewId: "); |
| intBuf.append(((UIViewRoot) component).getViewId()); |
| } |
| else |
| { |
| intBuf.append(",Id: "); |
| intBuf.append(component.getId()); |
| } |
| intBuf.append("]"); |
| |
| buf.insert(0,intBuf.toString()); |
| |
| getPathToComponent(component.getParent(), buf); |
| } |
| |
| |
| } |