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 + -
显示快捷键?