htmlmessagesrendererbase.java

来自「一个使用struts+hibernate+spring开发的完的网站源代码。」· Java 代码 · 共 360 行

JAVA
360
字号
/* * Copyright 2004 The Apache Software Foundation. *  * Licensed 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 org.apache.myfaces.renderkit.html;import org.apache.myfaces.renderkit.JSFAttr;import org.apache.myfaces.renderkit.RendererUtils;import org.apache.myfaces.util.NullIterator;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import javax.faces.application.FacesMessage;import javax.faces.component.UIComponent;import javax.faces.component.UIMessages;import javax.faces.component.html.HtmlMessages;import javax.faces.context.FacesContext;import javax.faces.context.ResponseWriter;import java.io.IOException;import java.util.Iterator;import java.util.Map;/** * @author Manfred Geiler (latest modification by $Author: mmarinschek $) * @version $Revision: 1.5 $ $Date: 2005/01/26 13:27:16 $ * $Log: HtmlMessagesRendererBase.java,v $ * Revision 1.5  2005/01/26 13:27:16  mmarinschek * The x:message tags are now extended to use the column-name as a label for all inputs in an x:dataTable, without having to specify additional information. * * Revision 1.4  2004/12/23 13:03:09  mmarinschek * id's not rendered (or not conditionally rendered); changes in jslistener to support both ie and firefox now * * Revision 1.3  2004/10/13 11:51:01  matze * renamed packages to org.apache * * Revision 1.2  2004/07/01 22:00:56  mwessendorf * ASF switch * * Revision 1.1  2004/03/30 17:47:36  manolito * Message and Messages refactored * */public abstract class HtmlMessagesRendererBase        extends HtmlMessageRendererBase{    private static final Log log = LogFactory.getLog(HtmlMessagesRendererBase.class);    protected static final String LAYOUT_LIST  = "list";    protected static final String LAYOUT_TABLE = "table";    protected void renderMessages(FacesContext facesContext,                                  UIComponent messages)            throws IOException    {        MessagesIterator messagesIterator = new MessagesIterator(facesContext,                                                                 isGlobalOnly(messages));        if (messagesIterator.hasNext())        {            String layout = getLayout(messages);            if (layout == null)            {                if (log.isDebugEnabled())                {                    log.debug("No messages layout given, using default layout 'list'.");                }                renderList(facesContext, messages, messagesIterator);            }            else if (layout.equalsIgnoreCase(LAYOUT_TABLE))            {                renderTable(facesContext, messages, messagesIterator);            }            else            {                if (log.isWarnEnabled() && !layout.equalsIgnoreCase(LAYOUT_LIST))                {                    log.warn("Unsupported messages layout '" + layout + "' - using default layout 'list'.");                }                renderList(facesContext, messages, messagesIterator);            }        }    }    private void renderList(FacesContext facesContext,                            UIComponent messages,                            MessagesIterator messagesIterator)            throws IOException    {        ResponseWriter writer = facesContext.getResponseWriter();        writer.startElement(HTML.UL_ELEM, messages);        HtmlRendererUtils.writeIdIfNecessary(writer, messages, facesContext);        while(messagesIterator.hasNext())        {            writer.startElement(HTML.LI_ELEM, messages);            renderSingleFacesMessage(facesContext,                                     messages,                                     (FacesMessage)messagesIterator.next(),                                     messagesIterator.getClientId());            writer.endElement(HTML.LI_ELEM);        }        writer.endElement(HTML.UL_ELEM);    }    private void renderTable(FacesContext facesContext,                             UIComponent messages,                             MessagesIterator messagesIterator)            throws IOException    {        ResponseWriter writer = facesContext.getResponseWriter();        writer.startElement(HTML.TABLE_ELEM, messages);        HtmlRendererUtils.writeIdIfNecessary(writer, messages, facesContext);        while(messagesIterator.hasNext())        {            writer.startElement(HTML.TR_ELEM, messages);            writer.startElement(HTML.TD_ELEM, messages);            renderSingleFacesMessage(facesContext,                                     messages,                                     (FacesMessage)messagesIterator.next(),                                        messagesIterator.getClientId());            writer.endElement(HTML.TD_ELEM);            writer.endElement(HTML.TR_ELEM);        }        writer.endElement(HTML.TABLE_ELEM);    }    protected String[] getStyleAndStyleClass(UIComponent messages,                                             FacesMessage.Severity severity)    {        String style = null;        String styleClass = null;        if (messages instanceof HtmlMessages)        {            if (severity == FacesMessage.SEVERITY_INFO)            {                style = ((HtmlMessages)messages).getInfoStyle();                styleClass = ((HtmlMessages)messages).getInfoClass();            }            else if (severity == FacesMessage.SEVERITY_WARN)            {                style = ((HtmlMessages)messages).getWarnStyle();                styleClass = ((HtmlMessages)messages).getWarnClass();            }            else if (severity == FacesMessage.SEVERITY_ERROR)            {                style = ((HtmlMessages)messages).getErrorStyle();                styleClass = ((HtmlMessages)messages).getErrorClass();            }            else if (severity == FacesMessage.SEVERITY_FATAL)            {                style = ((HtmlMessages)messages).getFatalStyle();                styleClass = ((HtmlMessages)messages).getFatalClass();            }            if (style == null)            {                style = ((HtmlMessages)messages).getStyle();            }            if (styleClass == null)            {                styleClass = ((HtmlMessages)messages).getStyleClass();            }        }        else        {            Map attr = messages.getAttributes();            if (severity == FacesMessage.SEVERITY_INFO)            {                style = (String)attr.get(JSFAttr.INFO_STYLE_ATTR);                styleClass = (String)attr.get(JSFAttr.INFO_CLASS_ATTR);            }            else if (severity == FacesMessage.SEVERITY_WARN)            {                style = (String)attr.get(JSFAttr.WARN_STYLE_ATTR);                styleClass = (String)attr.get(JSFAttr.WARN_CLASS_ATTR);            }            else if (severity == FacesMessage.SEVERITY_ERROR)            {                style = (String)attr.get(JSFAttr.ERROR_STYLE_ATTR);                styleClass = (String)attr.get(JSFAttr.ERROR_CLASS_ATTR);            }            else if (severity == FacesMessage.SEVERITY_FATAL)            {                style = (String)attr.get(JSFAttr.FATAL_STYLE_ATTR);                styleClass = (String)attr.get(JSFAttr.FATAL_CLASS_ATTR);            }            if (style == null)            {                style = (String)attr.get(JSFAttr.STYLE_CLASS_ATTR);            }            if (styleClass == null)            {                styleClass = (String)attr.get(JSFAttr.STYLE_CLASS_ATTR);            }        }        return new String[] {style, styleClass};    }    protected String getTitle(UIComponent component)    {        if (component instanceof HtmlMessages)        {            return ((HtmlMessages)component).getTitle();        }        else        {            return (String)component.getAttributes().get(JSFAttr.TITLE_ATTR);        }    }    protected boolean isTooltip(UIComponent component)    {        if (component instanceof HtmlMessages)        {            return ((HtmlMessages)component).isTooltip();        }        else        {            return RendererUtils.getBooleanAttribute(component, JSFAttr.TOOLTIP_ATTR, false);        }    }    protected boolean isShowSummary(UIComponent component)    {        if (component instanceof UIMessages)        {            return ((UIMessages)component).isShowSummary();        }        else        {            return RendererUtils.getBooleanAttribute(component, JSFAttr.SHOW_SUMMARY_ATTR, false);        }    }    protected boolean isShowDetail(UIComponent component)    {        if (component instanceof UIMessages)        {            return ((UIMessages)component).isShowDetail();        }        else        {            return RendererUtils.getBooleanAttribute(component, JSFAttr.SHOW_DETAIL_ATTR, false);        }    }    protected boolean isGlobalOnly(UIComponent component)    {        if (component instanceof UIMessages)        {            return ((UIMessages)component).isGlobalOnly();        }        else        {            return RendererUtils.getBooleanAttribute(component, JSFAttr.GLOBAL_ONLY_ATTR, false);        }    }    protected String getLayout(UIComponent component)    {        if (component instanceof HtmlMessages)        {            return ((HtmlMessages)component).getLayout();        }        else        {            return (String)component.getAttributes().get(JSFAttr.LAYOUT_ATTR);        }    }    private static class MessagesIterator implements Iterator    {        private FacesContext _facesContext;        private Iterator _globalMessagesIterator;        private Iterator _clientIdsWithMessagesIterator;        private Iterator _componentMessagesIterator = null;        private String _clientId = null;        public MessagesIterator(FacesContext facesContext, boolean globalOnly)        {            _facesContext = facesContext;            _globalMessagesIterator = facesContext.getMessages(null);            if (globalOnly)            {                _clientIdsWithMessagesIterator = NullIterator.instance();            }            else            {                _clientIdsWithMessagesIterator = facesContext.getClientIdsWithMessages();            }            _componentMessagesIterator = null;            _clientId = null;        }        public boolean hasNext()        {            return _globalMessagesIterator.hasNext() ||                   _clientIdsWithMessagesIterator.hasNext() ||                   (_componentMessagesIterator != null && _componentMessagesIterator.hasNext());        }        public Object next()        {            if (_globalMessagesIterator.hasNext())            {                return _globalMessagesIterator.next();            }            else if (_componentMessagesIterator != null && _componentMessagesIterator.hasNext())            {                return _componentMessagesIterator.next();            }            else            {                _clientId = (String)_clientIdsWithMessagesIterator.next();                _componentMessagesIterator = _facesContext.getMessages(_clientId);                return _componentMessagesIterator.next();            }        }        public void remove()        {            throw new UnsupportedOperationException(this.getClass().getName() + " UnsupportedOperationException");        }        public String getClientId()        {            return _clientId;        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?