org.ajax4jsf.framework.ajax.EventValueBinding Maven / Gradle / Ivy
/**
* Licensed under the Common Development and Distribution License,
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.sun.com/cddl/
*
* 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 org.ajax4jsf.framework.ajax;
import javax.faces.component.StateHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.el.EvaluationException;
import javax.faces.el.PropertyNotFoundException;
import javax.faces.el.ValueBinding;
import org.ajax4jsf.framework.renderer.AjaxRendererUtils;
import org.ajax4jsf.framework.util.message.Messages;
/**
* Inner class for build event string for parent component.
* @author shura (latest modification by $Author: alexsmirnov $)
* @version $Revision: 1.5 $ $Date: 2007/01/16 17:53:18 $
* Disadvantages - not rebuild event string setted as EL expression.
* TODO - save expressions for build event string at render phase.
*/
public class EventValueBinding extends ValueBinding implements StateHolder {
/**
*
*/
private static final long serialVersionUID = -6583167387542332290L;
private String _componentId;
/**
* current update component. transient since saved state as component.
*/
transient private AjaxSupport _component = null;
/**
* Default constructor for restoreState.
*/
public EventValueBinding() {
}
/**
* Constructor for build from AjaxComponent.
* @param update
*/
public EventValueBinding(AjaxSupport update)
{
_component = update;
// _componentId = string;
}
/* (non-Javadoc)
* @see javax.faces.el.ValueBinding#getType(javax.faces.context.FacesContext)
*/
public Class getType(FacesContext facesContext) throws EvaluationException, PropertyNotFoundException
{
return String.class;
}
/* (non-Javadoc)
* @see javax.faces.el.ValueBinding#getValue(javax.faces.context.FacesContext)
*/
public Object getValue(FacesContext facesContext) throws EvaluationException, PropertyNotFoundException
{
return getComponent(facesContext).getEventString();
}
private AjaxSupport getComponent(FacesContext facesContext) throws EvaluationException {
if (_component == null)
{
UIComponent uiComponent = facesContext.getViewRoot().findComponent(_componentId);
if (null != uiComponent && uiComponent instanceof AjaxComponent)
{
_component = (AjaxSupport) uiComponent;
} else {
throw new EvaluationException(Messages.getMessage(Messages.COMPONENT_NOT_FOUND, _componentId));
}
}
return _component;
}
/**
* @param component the component to set
*/
public void setComponent(AjaxSupport component) {
_component = component;
}
/* (non-Javadoc)
* @see javax.faces.el.ValueBinding#isReadOnly(javax.faces.context.FacesContext)
*/
public boolean isReadOnly(FacesContext facesContext) throws EvaluationException, PropertyNotFoundException
{
// TODO Auto-generated method stub
return true;
}
/* (non-Javadoc)
* @see javax.faces.el.ValueBinding#setValue(javax.faces.context.FacesContext, java.lang.Object)
*/
public void setValue(FacesContext facesContext, Object value) throws EvaluationException, PropertyNotFoundException
{
throw new EvaluationException(Messages.getMessage(Messages.EVENT_IS_READ_ONLY));
}
/* (non-Javadoc)
* @see javax.faces.component.StateHolder#saveState(javax.faces.context.FacesContext)
*/
public Object saveState(FacesContext context)
{
if(null == _component){
return _componentId;
} else {
return AjaxRendererUtils.getAbsoluteId((UIComponent) _component);
}
}
/* (non-Javadoc)
* @see javax.faces.component.StateHolder#restoreState(javax.faces.context.FacesContext, java.lang.Object)
*/
public void restoreState(FacesContext context, Object state)
{
// TODO Auto-generated method stub
_componentId = (String)state;
}
/* (non-Javadoc)
* @see javax.faces.component.StateHolder#isTransient()
*/
public boolean isTransient()
{
// TODO Auto-generated method stub
return false;
}
/* (non-Javadoc)
* @see javax.faces.component.StateHolder#setTransient(boolean)
*/
public void setTransient(boolean newTransientValue)
{
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see javax.faces.el.ValueBinding#getExpressionString()
*/
public String getExpressionString() {
// FacesContext context = FacesContext.getCurrentInstance();
// UIComponent component = (UIComponent) getComponent(context);
// return "#{ajaxSupport["+component.getClientId(context)+"]}";
return null;
}
}