jstlcoreforeach.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 708 行 · 第 1/2 页
JAVA
708 行
throw error(L.l("required attribute 'end' missing from <{0}>", getTagName())); int uniqueId = _gen.uniqueId(); String oldVar = "_jsp_oldVar_" + uniqueId; String oldStatusVar = "_jsp_status_" + uniqueId; if (_tagVar != null) { out.println(_tagVar + " = _jsp_state.get" + _tagVar + "(pageContext, _jsp_parent_tag);"); } String beginVar = "_jsp_begin_" + uniqueId; String endVar = "_jsp_end_" + uniqueId; String iVar = "_jsp_i_" + uniqueId; out.print("int " + beginVar + " = "); if (_beginAttr != null) out.print(_beginAttr.generateValue(int.class)); else out.print(generateValue(int.class, _begin)); out.println(";"); out.print("int " + endVar + " = "); if (_endAttr != null) out.print(_endAttr.generateValue(int.class)); else out.print(generateValue(int.class, _end)); out.println(";"); String stepVar = null; if (_step != null || _stepAttr != null) { stepVar = "_jsp_step_" + uniqueId; out.print("int " + stepVar + " = "); if (_stepAttr != null) out.print(_stepAttr.generateValue(int.class)); else out.print(generateValue(int.class, _step)); out.println(";"); } else stepVar = "1"; if (_tagVar != null) out.println(_tagVar + ".init(" + beginVar + ", " + endVar + ", " + stepVar + ");"); if (_varStatus != null) { out.print("Object " + oldStatusVar + " = pageContext.putAttribute(\""); out.print(escapeJavaString(_varStatus)); out.println("\", " + _tagVar + ");"); } /* if (_var != null) { out.print("Object " + oldVar + " = pageContext.getAttribute(\""); out.print(escapeJavaString(_var)); out.println("\");"); } */ out.print("for (int " + iVar + " = " + beginVar + "; "); out.print(iVar + " <= " + endVar + "; "); out.println(iVar + " += " + stepVar + ") {"); out.pushDepth(); if (_var != null) { out.print("pageContext.setAttribute(\"" + escapeJavaString(_var) + "\""); out.println(", new Integer(" + iVar + "));"); } if (_tagVar != null) { out.println(_tagVar + ".setCurrent(" + iVar + ");"); } generateChildren(out); out.popDepth(); out.println("}"); if (_var != null) { out.print("pageContext.removeAttribute(\""); out.print(escapeJavaString(_var)); out.println("\");"); /* out.print("pageContext.pageSetOrRemove(\""); out.print(escapeJavaString(_var)); out.println("\", " + oldVar + ");"); */ } if (_varStatus != null) { out.print("pageContext.removeAttribute(\""); out.print(escapeJavaString(_varStatus)); out.println("\");"); /* out.print("pageContext.pageSetOrRemove(\""); out.print(escapeJavaString(_varStatus)); out.println("\", " + oldStatusVar + ");"); */ } } /** * Generates the code for the c:forEach tag. */ public void generateCollectionForEach(JspJavaWriter out) throws Exception { int uniqueId = _gen.uniqueId(); String oldVar = "_jsp_oldVar_" + uniqueId; String oldStatusVar = "_jsp_status_" + uniqueId; if (_tagVar != null) { out.println(_tagVar + " = _jsp_state.get" + _tagVar + "(pageContext, _jsp_parent_tag);"); } String itemsVar = "_jsp_items_" + uniqueId; out.print("java.lang.Object " + itemsVar + " = "); if (_itemsAttr != null) out.print(_itemsAttr.generateValue(Object.class)); else out.print(generateValue(Object.class, _items)); out.println(";"); String mapperVar = "_jsp_vm_" + uniqueId; String deferredValue = null; if (_items != null && _items.contains("#{")) { deferredValue = "_caucho_value_expr_" + _gen.addValueExpr(_items, ""); } if (deferredValue != null && _var != null) { out.print("javax.el.ValueExpression " + mapperVar + " = _jsp_env.getVariableMapper().resolveVariable(\""); out.print(escapeJavaString(_var)); out.println("\");"); } String iterVar = "_jsp_iter_" + uniqueId; String iVar = "_jsp_i_" + uniqueId; out.println("java.util.Iterator " + iterVar + " = com.caucho.jstl.rt.CoreForEachTag.getIterator(" + itemsVar + ");"); String beginVar = null; if (_beginAttr != null || _begin != null) { beginVar = "_jsp_begin_" + uniqueId; out.print("int " + beginVar + " = "); if (_beginAttr != null) out.print(_beginAttr.generateValue(int.class)); else out.print(generateValue(int.class, _begin)); out.println(";"); } String intVar = "_jsp_int_" + uniqueId; if (beginVar != null) { out.print("for (int " + intVar + " = " + beginVar + ";"); out.println(intVar + " > 0; " + intVar + "--)"); out.println(" if (" + iterVar + ".hasNext()) " + iterVar + ".next();"); } String endVar = null; if (_endAttr != null || _end != null) { endVar = "_jsp_end_" + uniqueId; out.print("int " + endVar + " = "); if (_endAttr != null) out.print(_endAttr.generateValue(int.class)); else out.print(generateValue(int.class, _end)); out.println(";"); } String stepVar = null; if (_step != null || _stepAttr != null) { stepVar = "_jsp_step_" + uniqueId; out.print("int " + stepVar + " = "); if (_stepAttr != null) out.print(_stepAttr.generateValue(int.class)); else out.print(generateValue(int.class, _step)); out.println(";"); } else stepVar = "1"; if (_tagVar != null) { out.print(_tagVar + ".init("); if (beginVar != null) out.print(beginVar + ", "); else out.print("0, "); if (endVar != null) out.print(endVar + ", "); else out.print("Integer.MAX_VALUE, "); out.println(stepVar + ");"); } if (_varStatus != null) { out.print("Object " + oldStatusVar + " = pageContext.putAttribute(\""); out.print(escapeJavaString(_varStatus)); out.println("\", " + _tagVar + ");"); } /* if (_var != null) { out.print("Object " + oldVar + " = pageContext.getAttribute(\""); out.print(escapeJavaString(_var)); out.println("\");"); } */ if (endVar != null) { String begin = beginVar == null ? "0" : beginVar; out.print("for (int " + intVar + " = " + begin + "; "); out.print(intVar + " <= " + endVar); out.print(" && " + iterVar + ".hasNext(); "); out.println(intVar + " += " + stepVar + ") {"); } else out.println("while (" + iterVar + ".hasNext()) {"); out.pushDepth(); out.println("Object " + iVar + " = " + iterVar + ".next();"); if (_var != null) { out.print("pageContext.setAttribute(\"" + escapeJavaString(_var) + "\""); out.println(", " + iVar + ");"); } if (_tagVar != null) { out.println(_tagVar + ".setCurrent(" + iVar + ", " + iterVar + ".hasNext());"); } if (deferredValue != null && _var != null) { out.print("_jsp_env.getVariableMapper().setVariable(\""); out.print(escapeJavaString(_var)); out.print("\", "); out.print("com.caucho.jstl.rt.CoreForEachTag.getExpr("); out.print(deferredValue + ", " + _tagVar + ".getIndex(), " + itemsVar); out.println("));"); } generateChildren(out); if (! stepVar.equals("1")) { String stepI = "_jsp_si_" + uniqueId; out.print("for (int " + stepI + " = " + stepVar + "; "); out.println(stepI + " > 1; " + stepI + "--)"); out.println(" if (" + iterVar + ".hasNext()) " + iterVar + ".next();"); out.println("if (! " + iterVar + ".hasNext())"); out.println(" break;"); } out.popDepth(); out.println("}"); if (_var != null) { // jsp/1cmg out.print("pageContext.removeAttribute(\""); out.print(escapeJavaString(_var)); out.println("\");"); // restore EL variable if (deferredValue != null && _var != null) { out.print("_jsp_env.getVariableMapper().setVariable(\""); out.print(escapeJavaString(_var)); out.println("\", " + mapperVar + ");"); } } if (_varStatus != null) { // jsp/1cme out.print("pageContext.removeAttribute(\""); out.print(escapeJavaString(_varStatus)); out.println("\");"); } } /** * Generates code before the actual JSP. */ @Override public void generateTagState(JspJavaWriter out) throws Exception { if (! _isDeclaration) { super.generateTagState(out); return; } JspNode parentTagNode = getParent().getParentTagNode(); String tagClass; if (_items == null && _itemsAttr == null) tagClass = "com.caucho.jsp.IntegerLoopSupportTag"; else tagClass = "com.caucho.jsp.IteratorLoopSupportTag"; out.print("private "); out.print(tagClass); out.println(" " + _tagVar + ";"); out.println(); out.print("final "); out.print(tagClass); out.println(" get" + _tagVar + "(PageContext pageContext, javax.servlet.jsp.tagext.JspTag _jsp_parent_tag) throws Throwable"); out.println("{"); out.pushDepth(); out.println("if (" + _tagVar + " == null) {"); out.pushDepth(); out.println(_tagVar + " = new " + tagClass + "();"); if (parentTagNode == null) { out.println(_tagVar + ".setParent((javax.servlet.jsp.tagext.Tag) null);"); } else { out.println(_tagVar + ".setParent(" + parentTagNode.getCustomTagName() + ");"); } out.popDepth(); out.println("}"); out.println(); out.println("return " + _tagVar + ";"); out.popDepth(); out.println("}"); super.generateTagState(out); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?