1 33 34 package com.icesoft.faces.renderkit.dom_html_basic; 35 36 import com.icesoft.faces.context.DOMContext; 37 import org.w3c.dom.Element ; 38 import org.w3c.dom.Text ; 39 40 import javax.faces.application.FacesMessage; 41 import javax.faces.component.UIComponent; 42 import javax.faces.component.UIMessages; 43 import javax.faces.context.FacesContext; 44 import java.io.IOException ; 45 import java.util.Iterator ; 46 47 48 public class MessagesRenderer extends DomBasicRenderer { 49 50 public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) 51 throws IOException { 52 validateParameters(facesContext, uiComponent, UIMessages.class); 53 } 54 55 public void encodeChildren(FacesContext facesContext, 56 UIComponent uiComponent) throws IOException { 57 validateParameters(facesContext, uiComponent, UIMessages.class); 58 } 59 60 public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) 61 throws IOException { 62 validateParameters(facesContext, uiComponent, UIMessages.class); 63 64 DOMContext domContext = 65 DOMContext.attachDOMContext(facesContext, uiComponent); 66 if (domContext.isStreamWriting()) { 67 writeStream(facesContext, uiComponent); 68 return; 69 } 70 71 Iterator messagesIterator = null; 73 boolean retrieveGlobalMessagesOnly = 74 ((UIMessages) uiComponent).isGlobalOnly(); 75 if (retrieveGlobalMessagesOnly) { 76 messagesIterator = facesContext.getMessages(null); 77 } else { 78 messagesIterator = facesContext.getMessages(); 79 } 80 81 boolean tableLayout = false; String layout = (String ) uiComponent.getAttributes().get("layout"); 84 if (layout != null && layout.toLowerCase().equals("table")) { 85 tableLayout = true; 86 } 87 88 Element parentTarget = null; 90 if (tableLayout) { 91 if (!domContext.isInitialized()) { 92 parentTarget = domContext.createElement("table"); 93 domContext.setRootNode(parentTarget); 94 setRootElementId(facesContext, parentTarget, uiComponent); 95 } else { 96 parentTarget = (Element ) domContext.getRootNode(); 98 DOMContext.removeChildrenByTagName(parentTarget, "tr"); 99 } 100 } else { 101 if (!domContext.isInitialized()) { 102 Element list = domContext.createElement(HTML.UL_ELEM); 103 domContext.setRootNode(list); 104 parentTarget = list; 105 setRootElementId(facesContext, list, uiComponent); 106 } else { 107 parentTarget = (Element ) domContext.getRootNode(); 109 DOMContext.removeChildrenByTagName(parentTarget, HTML.LI_ELEM); 110 } 111 } 112 113 FacesMessage nextFacesMessage = null; 114 while (messagesIterator.hasNext()) { 115 116 nextFacesMessage = (FacesMessage) messagesIterator.next(); 117 118 String [] styleAndStyleClass = 119 getStyleAndStyleClass(uiComponent, nextFacesMessage); 120 String style = styleAndStyleClass[0]; 121 String styleClass = styleAndStyleClass[1]; 122 123 String [] summaryAndDetail = getSummaryAndDetail(nextFacesMessage); 124 String summary = summaryAndDetail[0]; 125 String detail = summaryAndDetail[1]; 126 127 boolean showSummary = ((UIMessages) uiComponent).isShowSummary(); 128 boolean showDetail = ((UIMessages) uiComponent).isShowDetail(); 129 130 Element nextTableData = null; 131 if (tableLayout) { 132 Element tr = domContext.createElement("tr"); 133 Element td = domContext.createElement("td"); 134 tr.appendChild(td); 135 parentTarget.appendChild(tr); 136 nextTableData = td; 137 } 138 139 Element nextMessageSpan = domContext.createElement(HTML.SPAN_ELEM); 140 if (tableLayout) { 141 nextTableData.appendChild(nextMessageSpan); 142 } else { 143 Element li = domContext.createElement(HTML.LI_ELEM); 144 parentTarget.appendChild(li); 145 li.appendChild(nextMessageSpan); 146 } 147 148 if (null != styleClass) { 149 nextMessageSpan.setAttribute("class", styleClass); 150 } 151 if (style != null && style.length() > 0) { 152 nextMessageSpan.setAttribute("style", style); 153 } 154 else { 155 nextMessageSpan.removeAttribute("style"); 156 } 157 158 boolean tooltip = getToolTipAttribute(uiComponent); 159 160 if (showSummary && showDetail && tooltip) { 161 nextMessageSpan.setAttribute("title", summary); 163 Text textNode = domContext.getDocument().createTextNode(detail); 164 nextMessageSpan.appendChild(textNode); 165 } else { 166 if (showSummary) { 167 Text textNode = 168 domContext.getDocument().createTextNode(summary); 169 nextMessageSpan.appendChild(textNode); 170 } 171 if (showDetail) { 172 Text textNode = 173 domContext.getDocument().createTextNode(detail); 174 nextMessageSpan.appendChild(textNode); 175 } 176 } 177 178 } 179 domContext.stepOver(); 180 } 181 182 private void writeStream(FacesContext facesContext, UIComponent uiComponent) 183 throws IOException { 184 DOMContext domContext = 185 DOMContext.getDOMContext(facesContext, uiComponent); 186 Element root = domContext.createRootElement(HTML.SPAN_ELEM); 187 Text text = domContext.createTextNode("List of Messages"); 188 Object style = uiComponent.getAttributes().get("style"); 189 String sstyle = ( (style == null) ? null : style.toString() ); 190 if (sstyle != null && sstyle.length() > 0) { 191 root.setAttribute(HTML.STYLE_ATTR, sstyle); 192 } 193 else { 194 root.removeAttribute(HTML.STYLE_ATTR); 195 } 196 root.appendChild(text); 197 domContext.streamWrite(facesContext, uiComponent); 198 domContext.stepOver(); 199 } 200 201 } 202 203 | Popular Tags |