jspnode.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,836 行 · 第 1/4 页

JAVA
1,836
字号
    String generateFragmentParameter(String string, boolean allowRtexpr)    throws Exception  {    int index = _gen.addExpr(string);    return ("new com.caucho.jsp.ELExprFragment(pageContext, _caucho_expr_" + index + ")");  }  /**   * Returns the containing segment.   */  public JspSegmentNode getSegment()  {    JspNode parent = getParent();    if (parent != null)      return parent.getSegment();    else      return null;  }  void generateFragment(JspJavaWriter out, JspFragmentNode frag,			String contextVar)    throws Exception  {    out.print(generateFragment(frag, contextVar));  }  void generateParentTag(JspJavaWriter out, TagInstance parent)    throws IOException  {    String parentId = parent.getId();    if (parentId == null || parentId.startsWith("top_")) {      out.print("null");    }    else if (parent.isSimpleTag()) {      out.print("(" + parentId + "_adapter != null ? ");      out.print(parentId + "_adapter : ");      out.print("(" + parentId + "_adapter = new javax.servlet.jsp.tagext.TagAdapter(" + parentId + ")))");    }    else      out.print(parentId);  }  String generateRTValue(Class type, Object value)    throws Exception  {    if (value instanceof String)      return generateParameterValue(type, (String) value,                                    true, null, _parseState.isELIgnored());    else {      JspAttribute attr = (JspAttribute) value;            return stringToValue(type, attr.generateValue());    }  }  /**   * Generates the code invoking a fragment to a string.   */  protected String invokeFragment(JspFragmentNode frag)    throws Exception  {    return frag.generateValue();  }  /**   * Generates the code for a fragment.   */  protected String generateFragment(JspFragmentNode frag, String contextVar)    throws Exception  {    int index = _gen.addFragment(frag);        StringBuffer cb = new StringBuffer();    if (frag.isStatic()) {      String fragmentVar = frag.getFragmentName();      cb.append(fragmentVar + " = com.caucho.jsp.StaticJspFragmentSupport.create(" + fragmentVar + ", " + contextVar + ", \"");      cb.append(escapeJavaString(frag.getStaticText()));      cb.append("\")");      return cb.toString();    }    String fragmentVar = frag.getFragmentName();    cb.append(fragmentVar + " = _CauchoFragment.create(" + fragmentVar + ", " +	      index + ", " + contextVar + ", ");    JspNode parentTag = getParentTagNode();    if (parentTag == null)      cb.append("null");    else if (frag.hasCustomTag() && parentTag instanceof CustomSimpleTag)      cb.append(parentTag.getCustomTagName() + "_adapter");    else      cb.append(parentTag.getCustomTagName());    if (_gen instanceof JavaTagGenerator) {      JavaTagGenerator tagGen = (JavaTagGenerator) _gen;            if (tagGen.isStaticDoTag()) // jsp/1025	cb.append(", _jspBody");      else	cb.append(", getJspBody()");    }    else      cb.append(", null");    cb.append(", _jsp_state");    cb.append(")");    return cb.toString();  }  /**   * Generates the code for the value of a parent tag.   */  protected String generateParentTag(TagInstance parent)    throws IOException  {    String parentId = parent.getId();    if (parent.isTop()) {      return "null";    }    else if (parent.isSimpleTag()) {      CharBuffer cb = CharBuffer.allocate();            cb.append("(" + parentId + "_adapter != null ? ");      cb.append(parentId + "_adapter : ");      cb.append("(" + parentId + "_adapter = new javax.servlet.jsp.tagext.TagAdapter(" + parentId + ")))");      return cb.close();    }    else      return parentId;  }  //  // JSF functions  //  /**   * Returns the variable containing the jsf component   */  public String getJsfVar()  {    if (_parent != null)      return _parent.getJsfVar();    else      return null;  }  /**   * Returns the variable containing the jsf body   */  public String getJsfBodyVar()  {    if (_parent != null)      return _parent.getJsfBodyVar();    else      return null;  }  /**   * True if the jsf-parent setting is required.   */  public boolean isJsfParentRequired()  {    return false;  }  //  // value generation  //  /**   * Generate include params.   */  void generateIncludeParams(JspJavaWriter out,                             ArrayList params)    throws Exception  {    boolean hasQuery = false;        for (int i = 0; i < params.size(); i++) {      JspParam param = (JspParam) params.get(i);      String value = param.getValue();              if (hasQuery)        out.print("+ \"&\" + ");              hasQuery = true;      out.print("\"" + param.getName() + "=\"");      String outValue = generateParameterValue(String.class, value);      if (outValue.equals("null")) {      }      else if (outValue.startsWith("\""))	out.print(" + (" + outValue + ")");      else	out.print(" + com.caucho.el.Expr.toString(" + outValue + ", null)");    }  }  String generateJstlValue(Class type, String value)    throws Exception  {    return generateParameterValue(type, value, true, null, false);  }  String generateValue(Class type, String value)    throws Exception  {    return generateParameterValue(type, value, true, null,                                  _parseState.isELIgnored());  }  String generateParameterValue(Class type, String value)    throws Exception  {    return generateParameterValue(type, value, true, null,                                  _parseState.isELIgnored());  }  String generateParameterValue(Class type,				String value,				boolean rtexpr,				TagAttributeInfo attrInfo,                                boolean isELIgnored)    throws Exception  {    // jsp/1c2m    if (isJstl())      isELIgnored = false;        boolean isEmpty = value == null || value.equals("");    if (isEmpty)      value = "0";    try {      if (JspFragment.class.equals(type))	return generateFragmentParameter(value, rtexpr);      else if (type.equals(ValueExpression.class)) {        int exprIndex;	String typeName = attrInfo != null ? attrInfo.getExpectedTypeName() : "";        if (isEmpty)          exprIndex = _gen.addValueExpr("", typeName);        else          exprIndex = _gen.addValueExpr(value, typeName);        if (value.indexOf("#{") < 0)          return ("_caucho_value_expr_" + exprIndex);        else {          StringBuilder sb = new StringBuilder();          sb.append("pageContext.createExpr(_caucho_value_expr_");          sb.append(exprIndex);          sb.append(", \"");          sb.append(escapeJavaString(value));          sb.append("\", ");          if (null == typeName || "".equals(typeName)) {            sb.append("java.lang.Object.class)");          } else {            sb.append(escapeJavaString(typeName));            sb.append(".class)");          }          return sb.toString();        }      }      else if (type.equals(MethodExpression.class)) {        int exprIndex;	String sig = attrInfo != null ? attrInfo.getMethodSignature() : "java.lang.String misc()";        if (isEmpty)          exprIndex = _gen.addMethodExpr("", sig);        else          exprIndex = _gen.addMethodExpr(value, sig);              return ("_caucho_method_expr_" + exprIndex);      }      else if (com.caucho.el.Expr.class.equals(type)) {        int exprIndex;        if (isEmpty)          exprIndex = _gen.addExpr("");        else          exprIndex = _gen.addExpr(value);              return ("_caucho_expr_" + exprIndex);      }      else if (com.caucho.xpath.Expr.class.equals(type)) {        int exprIndex;		com.caucho.xpath.Expr expr;        if (isEmpty)	  expr = XPath.parseExpr("");        else	  expr = XPath.parseExpr(value, getNamespaceContext());		return _gen.addXPathExpr(expr);      }      else if (rtexpr && hasRuntimeAttribute(value)) {        return getRuntimeAttribute(value);      }      else if (rtexpr && hasELAttribute(value, isELIgnored)) {        // jsp/0138, jsp/18s0, jsp/1ce5, jsp/1e0a	return generateELValue(type, value);      }      else if (! rtexpr && hasELAttribute(value, isELIgnored)) {	// JSP.2.3.6 says this is an error	// jsp/184v vs jsp/18cr vs jsp/18f5	// #2112	if (String.class.equals(type))	  return '"' + escapeJavaString(value) + '"';	else	  throw error(L.l("EL expression '{0}' is only allowed for attributes with rtexprvalue='true'.",			  value));      }      else if (rtexpr && hasDeferredAttribute(value, false)) {        // jsp/1c2m, jsp/1ce8        return generateELValue(type, value);      }      else if (! rtexpr	       && hasDeferredAttribute(value, isELIgnored)	       && ! _gen.getParseState().isDeferredSyntaxAllowedAsLiteral()) {	throw error(L.l("Deferred syntax '{0}' is not allowed as a literal.",			value));      }      else if (type.equals(boolean.class))        return String.valueOf(Boolean.valueOf(isEmpty ? "false" : value));      else if (type.equals(Boolean.class)) {        if (isEmpty)          return "java.lang.Boolean.FALSE";        else          return "new java.lang.Boolean(" + Boolean.valueOf(value) + ")";      }      else if (type.equals(byte.class))        return "(byte) " + Byte.valueOf(value);      else if (type.equals(Byte.class))        return "new java.lang.Byte((byte) " + Byte.valueOf(value) + ")";      else if (type.equals(char.class)) {        if (isEmpty)          return "'\\0'";        else          return "'" + value.charAt(0) + "'";      }      else if (type.equals(Character.class)) {        if (isEmpty)          return "new java.lang.Character('\\0')";        else          return ("new Character('" + value.charAt(0) + "')");      }      else if (type.equals(short.class))        return ("(short) " + Short.valueOf(value));      else if (type.equals(Short.class))        return ("new java.lang.Short((short) " + Short.valueOf(value) + ")");      else if (type.equals(int.class))        return String.valueOf(Integer.valueOf(value));      else if (type.equals(Integer.class))        return ("new java.lang.Integer(" + Integer.valueOf(value) + ")");      else if (type.equals(long.class))        return String.valueOf(Long.valueOf(value));      else if (type.equals(Long.class))        return ("new java.lang.Long(" + Long.valueOf(value) + ")");      else if (type.equals(float.class))        return ("(float) " + Float.valueOf(value));      else if (type.equals(Float.class))        return ("new java.lang.Float((float) " + Float.valueOf(value) + ")");      else if (type.equals(double.class))        return String.valueOf(Double.valueOf(value));      else if (type.equals(Double.class)) {	double v = Double.valueOf(value);	if (Double.isNaN(v))	  return ("new java.lang.Double(Double.NaN)");	else	  return ("new java.lang.Double(" + v + ")");      }      else if (! type.equals(String.class)	       && ! type.equals(Object.class)) {        return null;      }      else if (! isEmpty) {        return '"' + escapeJavaString(value) + '"';      }      else        return "\"\"";    } catch (NumberFormatException e) {      throw error(L.l("parameter format error: {0}", e.getMessage()), e);    }  }      protected String generateELValue(Class type, String value)    throws Exception  {    if (type.equals(com.caucho.el.Expr.class)) {      int exprIndex;      exprIndex = _gen.addExpr(value);            return ("_caucho_expr_" + exprIndex);    }    else if (type.equals(ValueExpression.class)) {      int exprIndex;      exprIndex = _gen.addValueExpr(value, "");            return ("_caucho_value_expr_" + exprIndex);    }    else if (type.equals(com.caucho.xpath.Expr.class)) {      com.caucho.xpath.Expr expr;      expr = XPath.parseExpr(value, getNamespaceContext());            return _gen.addXPathExpr(expr);    }    Expr expr = _gen.genExpr(value);    if (expr.isConstant()) {      try {	if (expr.evalObject(null) != null) {	}	else if (Character.class.isAssignableFrom(type)) {	  // jsp/18s0	  return "new Character((char) 0)";	}	else if (Boolean.class.isAssignableFrom(type)) {	  // jsp/18s1	  return "Boolean.FALSE";	}	else if (String.class.isAssignableFrom(type)) {	  // jsp/18s2	  return "\"\"";	}	else if (BigInteger.class.isAssignableFrom(type)) {	  return "java.math.BigInteger.ZERO";	}	else if (BigDecimal.class.isAssignableFrom(type)) {	  return "java.math.BigDecimal.ZERO";	}	else if (Number.class.isAssignableFrom(type)) {	  // jsp/18s6	  return "new " + type.getName() + "((byte) 0)";	}	else if (Object.class.isAssignableFrom(type))	  return "null";

⌨️ 快捷键说明

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