/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/sections/trunk/sections-app/src/java/org/sakaiproject/tool/section/jsf/backingbean/InitializableBean.java $ * $Id: InitializableBean.java 105080 2012-02-24 23:10:31Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2005, 2006, 2008 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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 org.sakaiproject.tool.section.jsf.backingbean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.jsf.model.PhaseAware; /** * Base class for JSF backing beans wishing to be initialized on page load. * * @author <a href="mailto:jholtzman@berkeley.edu">Josh Holtzman</a> * */ public abstract class InitializableBean implements PhaseAware { private static final Log logger = LogFactory.getLog(InitializableBean.class); private transient boolean notValidated; /** * JSF doesn't provide a way to configure an initialization method which will * be called after the contructor and all framework setters. By convention, * our backing beans use this method. It's triggered either by a Faces configuration * file setting "configured" to true, or by a JSF component directly calling "startRenderResponse". * * For greater subclassing flexibility, the init method is not declared to be * abstract. */ protected void init() { } /** * Remember if JSF entered the Validations phase. If so, and if we never * reach the Update Model Values phase, then validation failed. That may * be of interest to the backing bean. For example, the backing bean * may choose not to requery and reload data on a validation error. */ public void endProcessValidators() { setNotValidated(true); if (logger.isDebugEnabled()) logger.debug("endProcessValidators"); } public void endProcessUpdates() { setNotValidated(false); if (logger.isDebugEnabled()) logger.debug("endProcessUpdates"); } /** * Call init() at the beginning of every request rendering. * (This should also work to refresh session-scoped beans, but it's * only been tested with request scope.) */ public void startRenderResponse() { if (logger.isDebugEnabled()) logger.debug("startRenderResponse notValidated=" + isNotValidated()); init(); } public boolean isNotValidated() { return notValidated; } public void setNotValidated(boolean notValidated) { this.notValidated = notValidated; } /** * Signals that configuration is finished. */ public void setConfigured(boolean isConfigured) { if (logger.isDebugEnabled()) logger.debug("setConfigured " + isConfigured); if (isConfigured) { init(); } } }