You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Mark Roth <ma...@sun.com> on 2002/08/20 17:58:04 UTC
Re: cvs commit:
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources
messages.properties
Thans, Kin-Man!
- Mark
On Tue, 2002-08-20 at 11:50, kinman@apache.org wrote:
> kinman 2002/08/20 08:50:23
>
> Modified: jasper2/src/share/org/apache/jasper JspC.java
> jasper2/src/share/org/apache/jasper/compiler Generator.java
> ImplicitTagLibraryInfo.java Parser.java
> ParserController.java TagFileProcessor.java
> jasper2/src/share/org/apache/jasper/resources
> messages.properties
> Log:
> - Submitted by Mark Roth:
>
> - Implemented the value attribute of jsp:doBody for classic
> tag handlers.
> - Stubbed out JspC with getJspConfig() so it compiles.
> - Added null check for addInclude() to handle the case where there
> are no preludes or codas.
> - Now accepts /WEB-INF/tags as well as /WEB-INF/tags/ for tag file
> default directory.
> - ParserController now uses path name to determine if the given
> element is a tag file instead of searching for tag directive.
> - In a tag file, an attribute directive with a fragment attribute
> must not allow a rtexprvalue attribute, and must fix its value
> to "true". Fixed implementation to comply with spec.
> - Fixed preamble and postamble generator for Tag Files. Was not
> generating declarations, tag handler pools, methods buffer,
> helper fragment, etc. Generator now shares code between servlet
> and tag handler pre and post ambles.
> - Even though spec is not clear that they're required,
> added implicit objects to doTag() so they are available in
> tag files.
>
> Revision Changes Path
> 1.13 +13 -3 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java
>
> Index: JspC.java
> ===================================================================
> RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java,v
> retrieving revision 1.12
> retrieving revision 1.13
> diff -u -r1.12 -r1.13
> --- JspC.java 26 Jun 2002 16:50:38 -0000 1.12
> +++ JspC.java 20 Aug 2002 15:50:22 -0000 1.13
> @@ -75,6 +75,7 @@
>
> import org.apache.jasper.logging.Logger;
> import org.apache.jasper.logging.JasperLogger;
> +import org.apache.jasper.compiler.JspConfig;
>
> /**
> * Shell for the jspc compiler. Handles all options associated with the
> @@ -912,6 +913,15 @@
>
> Constants.jasperLog.setVerbosityLevel(verbosityLevel);
> }
> +
> + /**
> + * Obtain JSP configuration informantion specified in web.xml.
> + */
> + public JspConfig getJspConfig() {
> + // XXX - Stubbed out so Jasper compiles.
> + initServletContext();
> + return new JspConfig( context );
> + }
>
> }
>
>
>
>
> 1.72 +240 -97 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
>
> Index: Generator.java
> ===================================================================
> RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
> retrieving revision 1.71
> retrieving revision 1.72
> diff -u -r1.71 -r1.72
> --- Generator.java 20 Aug 2002 01:42:38 -0000 1.71
> +++ Generator.java 20 Aug 2002 15:50:22 -0000 1.72
> @@ -170,6 +170,7 @@
>
> out.println();
> page.visit(new DeclarationVisitor());
> + out.println();
> }
>
> /**
> @@ -329,23 +330,25 @@
> }
>
> /**
> - * Generates the beginning of the static portion of the servelet.
> + * Generate preamble package name
> + * (shared by servlet and tag handler preamble generation)
> */
> - private void generatePreamble(Node.Nodes page) throws JasperException {
> -
> - String servletPackageName = ctxt.getServletPackageName();
> - String servletClassName = ctxt.getServletClassName();
> - String serviceMethodName = Constants.SERVICE_METHOD_NAME;
> -
> - // First the package name:
> -
> - if (! "".equals(servletPackageName) && servletPackageName != null) {
> - out.printil("package " + servletPackageName + ";");
> + private void genPreamblePackage( String packageName )
> + throws JasperException
> + {
> + if (! "".equals(packageName) && packageName != null) {
> + out.printil("package " + packageName + ";");
> out.println();
> }
> -
> - // Generate imports
> -
> + }
> +
> + /**
> + * Generate preamble imports
> + * (shared by servlet and tag handler preamble generation)
> + */
> + private void genPreambleImports()
> + throws JasperException
> + {
> Iterator iter = pageInfo.getImports().iterator();
> while (iter.hasNext()) {
> out.printin("import ");
> @@ -353,31 +356,21 @@
> out.println(";");
> }
> out.println();
> + }
>
> - // Generate class declaration
> -
> - out.printin("public class ");
> - out.print (servletClassName);
> - out.print (" extends ");
> - out.print (pageInfo.getExtends());
> - if (!pageInfo.isThreadSafe()) {
> - out.print("implements SingleThreadModel");
> - }
> - out.println(" {");
> - out.pushIndent();
> -
> - // Class body begins here
> -
> - generateDeclarations(page);
> - out.println();
> -
> - // Static initializations here
> -
> + /**
> + * Generation of static initializers in preamble.
> + * For example, include list, el function map, prefix map.
> + * (shared by servlet and tag handler preamble generation)
> + */
> + private void genPreambleStaticInitializers()
> + throws JasperException
> + {
> // Static data for getIncludes()
> out.printil("private static java.util.Vector _jspx_includes;");
> out.println();
> List includes = pageInfo.getIncludes();
> - iter = includes.iterator();
> + Iterator iter = includes.iterator();
> if( !includes.isEmpty() ) {
> out.printil("static {");
> out.pushIndent();
> @@ -397,13 +390,16 @@
> // Static data for EL function and prefix maps:
> generateELFunctionMap();
> generatePrefixMap();
> + }
>
> - // Class variable declarations
> -
> - /*
> - * Declare tag handler pools (tags of the same type and with the same
> - * attribute set share the same tag handler pool)
> - */
> + /**
> + * Declare tag handler pools (tags of the same type and with the same
> + * attribute set share the same tag handler pool)
> + * (shared by servlet and tag handler preamble generation)
> + */
> + private void genPreambleClassVariableDeclarations( String className )
> + throws JasperException
> + {
> if (ctxt.getOptions().isPoolingEnabled()
> && !tagHandlerPoolNames.isEmpty()) {
> for (int i=0; i<tagHandlerPoolNames.size(); i++) {
> @@ -416,11 +412,17 @@
> // Constructor
> if (ctxt.getOptions().isPoolingEnabled()
> && !tagHandlerPoolNames.isEmpty()) {
> - generateServletConstructor(servletClassName);
> + generateConstructor(className);
> }
> -
> - // Methods here
> + }
>
> + /**
> + * Declare general-purpose methods
> + * (shared by servlet and tag handler preamble generation)
> + */
> + private void genPreambleMethods()
> + throws JasperException
> + {
> // Method used to get compile time include file dependencies
> out.printil("public java.util.List getIncludes() {");
> out.pushIndent();
> @@ -433,6 +435,45 @@
> && !tagHandlerPoolNames.isEmpty()) {
> generateDestroy();
> }
> + }
> +
> + /**
> + * Generates the beginning of the static portion of the servelet.
> + */
> + private void generatePreamble(Node.Nodes page) throws JasperException {
> +
> + String servletPackageName = ctxt.getServletPackageName();
> + String servletClassName = ctxt.getServletClassName();
> + String serviceMethodName = Constants.SERVICE_METHOD_NAME;
> +
> + // First the package name:
> + genPreamblePackage( servletPackageName );
> +
> + // Generate imports
> + genPreambleImports();
> +
> + // Generate class declaration
> + out.printin("public class ");
> + out.print (servletClassName);
> + out.print (" extends ");
> + out.print (pageInfo.getExtends());
> + if (!pageInfo.isThreadSafe()) {
> + out.print("implements SingleThreadModel");
> + }
> + out.println(" {");
> + out.pushIndent();
> +
> + // Class body begins here
> + generateDeclarations(page);
> +
> + // Static initializations here
> + genPreambleStaticInitializers();
> +
> + // Class variable declarations
> + genPreambleClassVariableDeclarations( servletClassName );
> +
> + // Methods here
> + genPreambleMethods();
>
> // Now the service method
> out.printin("public void ");
> @@ -668,10 +709,11 @@
> }
>
> /*
> - * Generates the servlet constructor.
> + * Generates the constructor.
> + * (shared by servlet and tag handler preamble generation)
> */
> - private void generateServletConstructor(String servletClassName) {
> - out.printil("public " + servletClassName + "() {");
> + private void generateConstructor(String className) {
> + out.printil("public " + className + "() {");
> out.pushIndent();
> for (int i=0; i<tagHandlerPoolNames.size(); i++) {
> out.printin((String) tagHandlerPoolNames.elementAt(i));
> @@ -1699,11 +1741,11 @@
> }
>
> public void visit(Node.JspBody n) throws JasperException {
> + Node.JspAttribute value = n.getValue();
> if (isSimpleTagHandler) {
> out.printin(simpleTagHandlerVar);
> out.print(".setJspBody(");
>
> - Node.JspAttribute value = n.getValue();
> if (value != null) {
> out.print(attributeValue(value, false, JspFragment.class,
> "null" ));
> @@ -1712,7 +1754,63 @@
> }
> out.println(");");
> } else {
> - visitBody(n);
> + Node parent = n.getParent();
> + if( (parent instanceof Node.CustomTag) && (value != null) ) {
> + Node.CustomTag customTag = (Node.CustomTag)parent;
> +
> + // Classic tag handler invoked with <jsp:body value="...">
> + // Generate a tag body that evaluates the given
> + // fragment.
> +
> + // First, generate a Map with all the AT_BEGIN and
> + // NESTED variables so the body can access them.
> + VariableInfo[] varInfos = customTag.getVariableInfos();
> + TagVariableInfo[] tagVarInfos =
> + customTag.getTagVariableInfos();
> +
> + String var = JspUtil.nextTemporaryVariableName();
> + out.printil( "java.util.HashMap " + var +
> + " = new java.util.HashMap();" );
> +
> + if( varInfos != null ) {
> + for( int i = 0; i < varInfos.length; i++ ) {
> + if( (varInfos[i].getScope() ==
> + VariableInfo.AT_BEGIN) ||
> + (varInfos[i].getScope() ==
> + VariableInfo.NESTED) )
> + {
> + out.printil( var + ".put( \"" +
> + varInfos[i].getVarName() + "\", " +
> + varInfos[i].getVarName() + " );" );
> + }
> + }
> + }
> +
> + if( tagVarInfos != null ) {
> + for( int i = 0; i < tagVarInfos.length; i++ ) {
> + if( (tagVarInfos[i].getScope() ==
> + VariableInfo.AT_BEGIN) ||
> + (tagVarInfos[i].getScope() ==
> + VariableInfo.NESTED) )
> + {
> + out.printin( var + ".put( \"" );
> + String name = tagVarInfos[i].getNameGiven();
> + if( name == null ) {
> + name = customTag.getTagData().
> + getAttributeString(
> + tagVarInfos[i].getNameFromAttribute());
> + }
> + out.println( name + "\", " + name + " );" );
> + }
> + }
> + }
> +
> + out.printil("(" +
> + attributeValue(value, false, JspFragment.class,
> + "null" ) + ").invoke( out, " + var + " );" );
> + } else {
> + visitBody(n);
> + }
> }
> }
>
> @@ -2675,6 +2773,29 @@
> }
>
> /**
> + * Common part of postamble, shared by both servlets and tag files.
> + */
> + private void genCommonPostamble() {
> + // Append any methods that were generated
> + out.print(methodsBuffer.toString());
> +
> + // Append the helper class
> + if( fragmentHelperClass.isUsed() ) {
> + fragmentHelperClass.generatePostamble();
> + out.printMultiLn(fragmentHelperClass.toString());
> + }
> +
> + // generate class definition for JspxState
> + if (maxTagNesting > 0) {
> + generateJspState();
> + }
> +
> + // Close the class definition
> + out.popIndent();
> + out.printil("}");
> + }
> +
> + /**
> * Generates the ending part of the static portion of the servlet.
> */
> private void generatePostamble(Node.Nodes page) {
> @@ -2703,23 +2824,8 @@
> out.popIndent();
> out.printil("}");
>
> - // Append any methods that were generated
> - out.print(methodsBuffer.toString());
> -
> - // Append the helper class
> - if( fragmentHelperClass.isUsed() ) {
> - fragmentHelperClass.generatePostamble();
> - out.printMultiLn(fragmentHelperClass.toString());
> - }
> -
> - // generate class definition for JspxState
> - if (maxTagNesting > 0) {
> - generateJspState();
> - }
> -
> - // Close the class definition
> - out.popIndent();
> - out.printil("}");
> + // Generated methods, helper classes, etc.
> + genCommonPostamble();
> }
>
> /**
> @@ -2751,17 +2857,17 @@
>
> Generator gen = new Generator(out, compiler);
>
> + if (gen.ctxt.getOptions().isPoolingEnabled()) {
> + gen.compileTagHandlerPoolList(page);
> + }
> if (gen.ctxt.isTagFile()) {
> TagInfo tagInfo = gen.ctxt.getTagInfo();
> - gen.generateTagHandlerPreamble(tagInfo);
> + gen.generateTagHandlerPreamble(tagInfo, page);
> page.visit(gen.new GenerateVisitor(gen.ctxt.isTagFile(), out,
> gen.methodsBuffer, null,
> tagInfo));
> gen.generateTagHandlerPostamble();
> } else {
> - if (gen.ctxt.getOptions().isPoolingEnabled()) {
> - gen.compileTagHandlerPoolList(page);
> - }
> gen.generatePreamble(page);
> gen.fragmentHelperClass.generatePreamble();
> page.visit(gen.new GenerateVisitor(gen.ctxt.isTagFile(), out,
> @@ -2774,28 +2880,20 @@
> /*
> * XXX
> */
> - private void generateTagHandlerPreamble(TagInfo tagInfo)
> - throws JasperException {
> + private void generateTagHandlerPreamble(TagInfo tagInfo, Node.Nodes tag )
> + throws JasperException
> + {
>
> // Generate package declaration
> String className = tagInfo.getTagClassName();
> if (className.indexOf('.') != -1) {
> String pkgName
> = className.substring(0, className.lastIndexOf("."));
> - out.printin("package ");
> - out.print(pkgName);
> - out.println(";");
> - out.println();
> + genPreamblePackage( pkgName );
> }
>
> // Generate imports
> - Iterator iter = pageInfo.getImports().iterator();
> - while (iter.hasNext()) {
> - out.printin("import ");
> - out.print ((String)iter.next());
> - out.println(";");
> - }
> - out.println();
> + genPreambleImports();
>
> // Generate class declaration
> out.printin("public class ");
> @@ -2808,19 +2906,45 @@
> out.pushIndent();
>
> // Class body begins here
> + generateDeclarations(tag);
>
> - // Static data for EL function and prefix maps:
> - generateELFunctionMap();
> - generatePrefixMap();
> + // Static initializations here
> + genPreambleStaticInitializers();
>
> + // Class variable declarations
> + genPreambleClassVariableDeclarations( tagInfo.getTagName() );
> +
> + // Tag-handler specific declarations:
> generateTagHandlerDeclarations(tagInfo);
>
> if (tagInfo.hasDynamicAttributes())
> generateSetDynamicAttribute();
>
> + // Methods here
> + genPreambleMethods();
> +
> + // Now the doTag() method
> out.printil("public void doTag() throws javax.servlet.jsp.JspException {");
> out.pushIndent();
> out.printil("PageContext pageContext = new JspContextWrapper(getJspContext());");
> +
> + // Declare implicit objects.
> + // XXX - Note that the current JSP 2.0 PFD
> + // spec is unclear about whether these are required
> + // XXX - Optimization: Check scriptlets and expressions for the
> + // use of any of these. They're not likely to be used. If they're
> + // not used, get rid of them.
> + out.printil( "javax.servlet.ServletRequest request = " +
> + "pageContext.getRequest();" );
> + out.printil( "javax.servlet.ServletResponse response = " +
> + "pageContext.getResponse();" );
> + out.printil( "javax.servlet.http.HttpSession session = " +
> + "pageContext.getSession();" );
> + out.printil( "javax.servlet.ServletContext application = " +
> + "pageContext.getServletContext();" );
> + out.printil("javax.servlet.ServletConfig config = " +
> + "pageContext.getServletConfig();");
> +
> // Declare parameter map for fragment/body invocation
> out.printil("java.util.Map _jspx_params = null;");
>
> @@ -2830,21 +2954,40 @@
>
> out.printil("javax.servlet.jsp.JspWriter out = pageContext.getOut();");
> generatePageScopedVariables(tagInfo);
> +
> + // Number of tag object that need to be popped
> + // XXX TODO: use a better criteria
> + maxTagNesting = pageInfo.getMaxTagNesting();
> +
> + declareTemporaryScriptingVars(tag);
> + out.println();
> +
> out.printil("try {");
> out.pushIndent();
> }
>
> private void generateTagHandlerPostamble() {
> out.popIndent();
> - out.printil("} catch (java.io.IOException ioe) {");
> - out.pushIndent();
> - out.printil("throw new javax.servlet.jsp.JspException(ioe);");
> - out.popIndent();
> - out.printil("}");
> - out.popIndent();
> - out.printil("}");
> - out.popIndent();
> - out.printil("}");
> + //out.printil("} catch (java.io.IOException ioe) {");
> + //out.pushIndent();
> + //out.printil("throw new javax.servlet.jsp.JspException(ioe);");
> + //out.popIndent();
> + //out.printil("}");
> +
> + // Have to catch Throwable because a classic tag handler
> + // helper method is declared to throw Throwable.
> + out.printil( "} catch( Throwable t ) {" );
> + out.pushIndent();
> + out.printil("throw new javax.servlet.jsp.JspException(t);" );
> + out.popIndent();
> + out.printil( "}" );
> +
> + // Close the doTag method
> + out.popIndent();
> + out.printil("}");
> +
> + // Generated methods, helper classes, etc.
> + genCommonPostamble();
> }
>
> /**
>
>
>
> 1.7 +7 -5 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java
>
> Index: ImplicitTagLibraryInfo.java
> ===================================================================
> RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java,v
> retrieving revision 1.6
> retrieving revision 1.7
> diff -u -r1.6 -r1.7
> --- ImplicitTagLibraryInfo.java 19 Aug 2002 23:06:01 -0000 1.6
> +++ ImplicitTagLibraryInfo.java 20 Aug 2002 15:50:22 -0000 1.7
> @@ -76,7 +76,7 @@
> */
> public class ImplicitTagLibraryInfo extends TagLibraryInfo {
>
> - private static final String WEB_INF_TAGS = "/WEB-INF/tags/";
> + private static final String WEB_INF_TAGS = "/WEB-INF/tags";
> private static final String TAG_FILE_SUFFIX = ".tag";
> private static final String TAGS_SHORTNAME = "tags";
> private static final String TLIB_VERSION = "1.0";
> @@ -101,7 +101,9 @@
>
> // Determine the value of the <short-name> subelement of the
> // "imaginary" <taglib> element
> - if (tagdir.equals(WEB_INF_TAGS)) {
> + if (tagdir.equals(WEB_INF_TAGS) ||
> + tagdir.equals( WEB_INF_TAGS + "/" ) )
> + {
> shortname = TAGS_SHORTNAME;
> } else {
> shortname = tagdir.substring(WEB_INF_TAGS.length());
>
>
>
> 1.23 +16 -14 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java
>
> Index: Parser.java
> ===================================================================
> RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java,v
> retrieving revision 1.22
> retrieving revision 1.23
> diff -u -r1.22 -r1.23
> --- Parser.java 20 Aug 2002 03:52:18 -0000 1.22
> +++ Parser.java 20 Aug 2002 15:50:22 -0000 1.23
> @@ -372,17 +372,19 @@
> * and include-coda of jsp-config element in web.xml
> */
> private void addInclude(Node parent, List files) throws JasperException {
> - Iterator iter = files.iterator();
> - while (iter.hasNext()) {
> - String file = (String) iter.next();
> - AttributesImpl attrs = new AttributesImpl();
> - attrs.addAttribute("", "file", "file", "CDATA", file);
> + if( files != null ) {
> + Iterator iter = files.iterator();
> + while (iter.hasNext()) {
> + String file = (String) iter.next();
> + AttributesImpl attrs = new AttributesImpl();
> + attrs.addAttribute("", "file", "file", "CDATA", file);
>
> - // Create a dummy Include directive node
> - Node includeNode = new Node.IncludeDirective(attrs, reader.mark(),
> - parent);
> - processIncludeDirective(file, includeNode);
> - }
> + // Create a dummy Include directive node
> + Node includeNode = new Node.IncludeDirective(attrs,
> + reader.mark(), parent);
> + processIncludeDirective(file, includeNode);
> + }
> + }
> }
>
> /*
>
>
>
> 1.12 +8 -5 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java
>
> Index: ParserController.java
> ===================================================================
> RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java,v
> retrieving revision 1.11
> retrieving revision 1.12
> diff -u -r1.11 -r1.12
> --- ParserController.java 20 Aug 2002 03:52:18 -0000 1.11
> +++ ParserController.java 20 Aug 2002 15:50:22 -0000 1.12
> @@ -278,12 +278,15 @@
> // FIXME: We assume xml parser will take care of
> // encoding for page in XML syntax. Correct?
> if (!isXml) {
> - jspReader.reset(startMark);
> - while (jspReader.skipUntil("<%@") != null) {
> + // Note: this currently assumes there is no XML syntax for tag
> + // files (as of PFD of the JSP 2.0 spec there is an XML view,
> + // but no XML syntax).
> + isTagFile = file.startsWith( "/WEB-INF/tags" ) ||
> + file.startsWith( "/META-INF/tags" );
> + jspReader.reset(startMark);
> + while (jspReader.skipUntil("<%@") != null) {
> jspReader.skipSpaces();
> - boolean tIsTagFile = jspReader.matches("tag ");
> - if (tIsTagFile || jspReader.matches("page")) {
> - isTagFile = tIsTagFile;
> + if (jspReader.matches( "tag " ) || jspReader.matches("page")) {
> jspReader.skipSpaces();
> Attributes attrs = Parser.parseAttributes(this, jspReader);
> String attribute = "pageEncoding";
>
>
>
> 1.14 +12 -4 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java
>
> Index: TagFileProcessor.java
> ===================================================================
> RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java,v
> retrieving revision 1.13
> retrieving revision 1.14
> diff -u -r1.13 -r1.14
> --- TagFileProcessor.java 19 Aug 2002 23:06:01 -0000 1.13
> +++ TagFileProcessor.java 20 Aug 2002 15:50:22 -0000 1.14
> @@ -181,15 +181,23 @@
> String attrName = n.getAttributeValue("name");
> boolean required = JspUtil.booleanValue(
> n.getAttributeValue("required"));
> - boolean rtexprvalue = JspUtil.booleanValue(
> - n.getAttributeValue("rtexprvalue"));
> + String rtexprvalueString = n.getAttributeValue("rtexprvalue");
> + boolean rtexprvalue = JspUtil.booleanValue( rtexprvalueString );
> boolean fragment = JspUtil.booleanValue(
> n.getAttributeValue("fragment"));
> String type = n.getAttributeValue("type");
> if (fragment) {
> fragmentAttributesMap.put(attrName, n);
> + // type is fixed to "JspFragment" and a translation error
> + // must occur if specified.
> if (type != null) {
> err.jspError("jsp.error.fragmentwithtype");
> + }
> + // rtexprvalue is fixed to "true" and a translation error
> + // must occur if specified.
> + rtexprvalue = true;
> + if( rtexprvalueString != null ) {
> + err.jspError("jsp.error.frgmentwithrtexprvalue" );
> }
> } else {
> if (type == null)
>
>
>
> 1.25 +3 -2 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties
>
> Index: messages.properties
> ===================================================================
> RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties,v
> retrieving revision 1.24
> retrieving revision 1.25
> diff -u -r1.24 -r1.25
> --- messages.properties 20 Aug 2002 03:52:18 -0000 1.24
> +++ messages.properties 20 Aug 2002 15:50:23 -0000 1.25
> @@ -281,6 +281,7 @@
> jsp.error.attribute.noquote=quote symbol expected
> jsp.error.attribute.unterminated=attribute for {0} is not properly terminated
> jsp.error.missing.tagInfo=TagInfo object for {0} is missing from TLD
> -jsp.error.fragmentwithtype=Both 'fragment' and 'type' attributes specified in tag directive
> +jsp.error.fragmentwithtype=Cannot specify both 'fragment' and 'type' attributes. If 'fragment' is present, 'type' is fixed as 'javax.servlet.jsp.tagext.JspFragment'
> +jsp.error.fragmentwithrtexprvalue=Cannot specify both 'fragment' and 'rtexprvalue' attributes. If 'fragment' is present, 'rtexprvalue' is fixed as 'true'
> jsp.error.fragmentWithDeclareOrScope=Both 'fragment' and 'declare' or 'scope' attributes specified in variable directive
> jsp.warning.bad.urlpattern.propertygroup=Bad value {0} in the url-pattern subelement in web.xml
>
>
>
>
> --
> To unsubscribe, e-mail: <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
>
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>