📄 htmltreerenderer.java
字号:
{ HtmlTreeNode child = (HtmlTreeNode) it.next(); if (!child.isRendered()) { continue; } HtmlRendererUtils.writePrettyLineSeparator(facesContext); writer.startElement(HTML.TR_ELEM, null); if (rowClassIndex < rowClassesCount) { writer.writeAttribute(HTML.CLASS_ATTR, rowClassesArray[rowClassIndex], null); } if (rowClassesCount > 0) { rowClassIndex++; rowClassIndex = rowClassIndex % rowClassesCount; } if (null != tree.getVar()) { facesContext.getExternalContext().getSessionMap().put(tree.getVar(), ((TreeNode) child.getUserObject()).getUserObject()); } List componentChildren = tree.getChildren(); if ((null != componentChildren) && (componentChildren.size() > 0)) { for (int j = 0, size = tree.getChildCount(); j < size; j++) { UIComponent componentChild = (UIComponent) componentChildren.get(j); if ((componentChild.getFamily().equals(UIColumn.COMPONENT_FAMILY)) && ((UIColumn) componentChild).isRendered()) { writer.startElement(HTML.TD_ELEM, tree); if (columnClassIndex < columnClassesCount) { writer.writeAttribute(HTML.CLASS_ATTR, columnClassesArray[columnClassIndex], null); } if (columnClassesCount > 0) { columnClassIndex++; columnClassIndex = columnClassIndex % columnClassesCount; } RendererUtils.renderChild(facesContext, componentChild); writer.endElement(HTML.TD_ELEM); } else if ((componentChild.getFamily().equals(HtmlTreeColumn.COMPONENT_FAMILY)) && ((HtmlTreeColumn) componentChild).isRendered()) { renderTreeColumnChild(facesContext, writer, componentChild, tree, child, maxLevel, iconProvider); } } } else { renderTreeColumnChild(facesContext, writer, null, tree, child, maxLevel, iconProvider); } writer.endElement(HTML.TR_ELEM); if (child.getChildCount() > 0) { renderChildren(facesContext, writer, tree, child.getChildren(), maxLevel, iconProvider, rowClassIndex); if (rowClassesCount > 0) { rowClassIndex += (child.getChildCount() % rowClassesCount); rowClassIndex = rowClassIndex % rowClassesCount; } } } } /** * <p> * Render the column where the tree is displayed. * </p> * * @param facesContext The facesContext. * @param writer The writer. * @param component The component that will contain the tree. Null for * default tree or {@link HtmlTreeColumn}for table rendering. * @param tree The tree, * @param child The tree node child. * @param maxLevel The max number of levels. * @param iconProvider The iconProvider. * @throws IOException Throws IOException. */ protected void renderTreeColumnChild(FacesContext facesContext, ResponseWriter writer, UIComponent component, HtmlTree tree, HtmlTreeNode child, int maxLevel, IconProvider iconProvider) throws IOException { String iconClass = tree.getIconClass(); int[] layout = child.getLayout(); // tree lines for (int i = 0; i < layout.length - 1; i++) { int state = layout[i]; writer.startElement(HTML.TD_ELEM, null); String url = getLayoutImage(tree, state); if ((url != null) && (url.length() > 0)) { //writer.startElement(HTML.IMG_ELEM, child); //String src; //if (url.startsWith(HTML.HREF_PATH_SEPARATOR)) //{ // String path = facesContext.getExternalContext().getRequestContextPath(); // src = path + url; //} //else //{ // src = url; //} //Encode URL //Although this is an url url, encodeURL is no nonsense, // because the //actual url url could also be a dynamic servlet request: //src = facesContext.getExternalContext().encodeResourceURL(src); //writer.writeAttribute(HTML.SRC_ATTR, src, null); //writer.writeAttribute(HTML.BORDER_ATTR, ZERO, null); //HtmlRendererUtils.renderHTMLAttributes(writer, child, HTML.IMG_PASSTHROUGH_ATTRIBUTES); //writer.endElement(HTML.IMG_ELEM); writeImageElement(url, facesContext, writer, child); } writer.endElement(HTML.TD_ELEM); } // command link writer.startElement(HTML.TD_ELEM, null); int state = layout[layout.length - 1]; String url = getLayoutImage(tree, state); if (state == HtmlTreeNode.CHILD || state == HtmlTreeNode.CHILD_FIRST || state == HtmlTreeNode.CHILD_LAST) { // no action, just img writeImageElement(url, facesContext, writer, child); } else { HtmlTreeImageCommandLink expandCollapse = (HtmlTreeImageCommandLink) child .getExpandCollapseCommand(facesContext); expandCollapse.setImage(getLayoutImage(tree, layout[layout.length - 1])); expandCollapse.encodeBegin(facesContext); expandCollapse.encodeEnd(facesContext); } writer.endElement(HTML.TD_ELEM); int labelColSpan = maxLevel - child.getLevel() + 1; // node icon if (iconProvider != null) { url = iconProvider.getIconUrl(child.getUserObject(), child.getChildCount(), child.isLeaf(facesContext)); } else { if (!child.isLeaf(facesContext)) { // todo: icon provider url = HtmlTree.getDefaultImagePath( DEFAULT_IMAGE_ICON_FOLDER ); } else { url = null; } } if ((url != null) && (url.length() > 0)) { writer.startElement(HTML.TD_ELEM, null); if (iconClass != null) { writer.writeAttribute(HTML.CLASS_ATTR, iconClass, null); } writeImageElement(url, facesContext, writer, child); writer.endElement(HTML.TD_ELEM); } else { // no icon, so label has more room labelColSpan++; } // node label writer.startElement(HTML.TD_ELEM, null); writer.writeAttribute(HTML.COLSPAN_ATTR, new Integer(labelColSpan), null); if (child.isSelected() && tree.getSelectedNodeClass() != null) { writer.writeAttribute(HTML.CLASS_ATTR, tree.getSelectedNodeClass(), null); } else if (!child.isSelected() && tree.getNodeClass() != null) { writer.writeAttribute(HTML.CLASS_ATTR, tree.getNodeClass(), null); } List componentChildren = null; if (null != component) { componentChildren = component.getChildren(); } if ((null != componentChildren) && (componentChildren.size() > 0)) { for (int k = 0; k < componentChildren.size(); k++) { UIComponent componentChild = (UIComponent) componentChildren.get(k); RendererUtils.renderChild(facesContext, componentChild); } } else { child.encodeBegin(facesContext); child.encodeEnd(facesContext); } writer.endElement(HTML.TD_ELEM); } private void writeImageElement(String url, FacesContext facesContext, ResponseWriter writer, HtmlTreeNode child) throws IOException { writer.startElement(HTML.IMG_ELEM, child); String src = facesContext.getApplication().getViewHandler().getResourceURL(facesContext, url); // if (url.startsWith(HTML.HREF_PATH_SEPARATOR)) // { // String path = // facesContext.getExternalContext().getRequestContextPath(); // src = path + url; // } else // { // src = url; // } // //Encode URL // src = facesContext.getExternalContext().encodeResourceURL(src); writer.writeAttribute(HTML.SRC_ATTR, src, null); writer.writeAttribute(HTML.BORDER_ATTR, ZERO, null); HtmlRendererUtils.renderHTMLAttributes(writer, child, HTML.IMG_PASSTHROUGH_ATTRIBUTES); writer.endElement(HTML.IMG_ELEM); } protected String getLayoutImage(HtmlTree tree, int state) { switch (state) { case HtmlTreeNode.OPEN: return tree.getIconNodeOpenMiddle(); case HtmlTreeNode.OPEN_FIRST: return tree.getIconNodeOpenFirst(); case HtmlTreeNode.OPEN_LAST: return tree.getIconNodeOpenLast(); case HtmlTreeNode.OPEN_SINGLE: return tree.getIconNodeOpen(); case HtmlTreeNode.CLOSED: return tree.getIconNodeCloseMiddle(); case HtmlTreeNode.CLOSED_FIRST: return tree.getIconNodeCloseFirst(); case HtmlTreeNode.CLOSED_LAST: return tree.getIconNodeCloseLast(); case HtmlTreeNode.CLOSED_SINGLE: return tree.getIconNodeClose(); case HtmlTreeNode.CHILD: return tree.getIconChildMiddle(); case HtmlTreeNode.CHILD_FIRST: return tree.getIconChildFirst(); case HtmlTreeNode.CHILD_LAST: return tree.getIconChildLast(); case HtmlTreeNode.LINE: return tree.getIconLine(); case HtmlTreeNode.EMPTY: return tree.getIconNoline(); default: return tree.getIconNoline(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -