dmkarr      2002/10/24 21:45:01

  Modified:    contrib/struts-el/doc/userGuide struts-logic-el.xml
               contrib/struts-el/web/exercise-taglib index.jsp
                        logic-present.jsp
  Added:       contrib/struts-el/src/share/org/apache/strutsel/taglib/logic
                        ELNotPresentTag.java ELPresentTag.java
  Log:
  Added logic-el:present and logic-el:notPresent because of their role functionality
  
  Revision  Changes    Path
  1.1                  
jakarta-struts/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotPresentTag.java
  
  Index: ELNotPresentTag.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-struts/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotPresentTag.java,v
 1.1 2002/10/25 04:45:01 dmkarr Exp $
   * $Revision: 1.1 $
   * $Date: 2002/10/25 04:45:01 $
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowledgement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Struts", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  package org.apache.strutsel.taglib.logic;
  
  import org.apache.struts.taglib.logic.NotPresentTag;
  import javax.servlet.jsp.JspException;
  import org.apache.strutsel.taglib.utils.EvalHelper;
  import org.apache.taglibs.standard.tag.common.core.NullAttributeException;
  
  /**
   * Evaluates the nested body content of this tag if the specified value is
   * not present for this request.
   *<p>
   * This class is a subclass of the class
   * <code>org.apache.struts.taglib.logic.NotPresentTag</code> which
   * provides most of the described functionality.  This subclass allows all
   * attribute values to be specified as expressions utilizing the JavaServer
   * Pages Standard Library expression language.
   *
   * @author David M. Karr
   * @version $Revision: 1.1 $
   */
  public class ELNotPresentTag extends NotPresentTag {
  
      /**
       * Process the start tag.
       *
       * @exception JspException if a JSP exception has occurred
       */
      public int doStartTag() throws JspException {
          evaluateExpressions();
          return (super.doStartTag());
      }
  
      /**
       * Evaluates and returns a single attribute value, given the attribute
       * name, attribute value, and attribute type.  It uses the
       * <code>EvalHelper</code> class to interface to
       * <code>ExpressionUtil.evalNotNull</code> to do the actual evaluation, and
       * it passes to this the name of the current tag, the <code>this</code>
       * pointer, and the current pageContext.
       *
       * @param attrName attribute name being evaluated
       * @param attrValue String value of attribute to be evaluated using EL
       * @param attrType Required resulting type of attribute value
       * @exception NullAttributeException if either the <code>attrValue</code>
       * was null, or the resulting evaluated value was null.
       * @return Resulting attribute value
       */
      private Object   evalAttr(String   attrName,
                                String   attrValue,
                                Class    attrType)
          throws JspException, NullAttributeException
      {
          return (EvalHelper.eval("notPresent", attrName, attrValue, attrType,
                                  this, pageContext));
      }
      
      /**
       * Processes all attribute values which use the JSTL expression evaluation
       * engine to determine their values.  If any evaluation fails with a
       * <code>NullAttributeException</code> it will just use <code>null</code>
       * as the value.
       *
       * @exception JspException if a JSP exception has occurred
       */
      private void evaluateExpressions() throws JspException {
          try {
              setCookie((String) evalAttr("cookie", getCookie(), String.class));
          } catch (NullAttributeException ex) {
              setCookie(null);
          }
  
          try {
              setHeader((String) evalAttr("header", getHeader(),
                                           String.class));
          } catch (NullAttributeException ex) {
              setHeader(null);
          }
  
          try {
              setName((String) evalAttr("name", getName(), String.class));
          } catch (NullAttributeException ex) {
              setName(null);
          }
  
          try {
              setParameter((String) evalAttr("parameter", getParameter(),
                                             String.class));
          } catch (NullAttributeException ex) {
              setParameter(null);
          }
  
          try {
              setProperty((String) evalAttr("property", getProperty(),
                                            String.class));
          } catch (NullAttributeException ex) {
              setProperty(null);
          }
  
          try {
              setRole((String) evalAttr("role", getRole(), String.class));
          } catch (NullAttributeException ex) {
              setRole(null);
          }
  
          try {
              setScope((String) evalAttr("scope", getScope(), String.class));
          } catch (NullAttributeException ex) {
              setScope(null);
          }
  
          try {
              setUser((String) evalAttr("user", getUser(), String.class));
          } catch (NullAttributeException ex) {
              setUser(null);
          }
      }
  }
  
  
  
  1.1                  
jakarta-struts/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELPresentTag.java
  
  Index: ELPresentTag.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-struts/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELPresentTag.java,v
 1.1 2002/10/25 04:45:01 dmkarr Exp $
   * $Revision: 1.1 $
   * $Date: 2002/10/25 04:45:01 $
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowledgement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Struts", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  package org.apache.strutsel.taglib.logic;
  
  import org.apache.struts.taglib.logic.PresentTag;
  import javax.servlet.jsp.JspException;
  import org.apache.strutsel.taglib.utils.EvalHelper;
  import org.apache.taglibs.standard.tag.common.core.NullAttributeException;
  
  /**
   * Evaluates the nested body content of this tag if the specified value is
   * present for this request.
   *<p>
   * This class is a subclass of the class
   * <code>org.apache.struts.taglib.logic.PresentTag</code> which
   * provides most of the described functionality.  This subclass allows all
   * attribute values to be specified as expressions utilizing the JavaServer
   * Pages Standard Library expression language.
   *
   * @author David M. Karr
   * @version $Revision: 1.1 $
   */
  public class ELPresentTag extends PresentTag {
  
      /**
       * Process the start tag.
       *
       * @exception JspException if a JSP exception has occurred
       */
      public int doStartTag() throws JspException {
          evaluateExpressions();
          return (super.doStartTag());
      }
  
      /**
       * Evaluates and returns a single attribute value, given the attribute
       * name, attribute value, and attribute type.  It uses the
       * <code>EvalHelper</code> class to interface to
       * <code>ExpressionUtil.evalNotNull</code> to do the actual evaluation, and
       * it passes to this the name of the current tag, the <code>this</code>
       * pointer, and the current pageContext.
       *
       * @param attrName attribute name being evaluated
       * @param attrValue String value of attribute to be evaluated using EL
       * @param attrType Required resulting type of attribute value
       * @exception NullAttributeException if either the <code>attrValue</code>
       * was null, or the resulting evaluated value was null.
       * @return Resulting attribute value
       */
      private Object   evalAttr(String   attrName,
                                String   attrValue,
                                Class    attrType)
          throws JspException, NullAttributeException
      {
          return (EvalHelper.eval("present", attrName, attrValue, attrType,
                                  this, pageContext));
      }
      
      /**
       * Processes all attribute values which use the JSTL expression evaluation
       * engine to determine their values.  If any evaluation fails with a
       * <code>NullAttributeException</code> it will just use <code>null</code>
       * as the value.
       *
       * @exception JspException if a JSP exception has occurred
       */
      private void evaluateExpressions() throws JspException {
          try {
              setCookie((String) evalAttr("cookie", getCookie(), String.class));
          } catch (NullAttributeException ex) {
              setCookie(null);
          }
  
          try {
              setHeader((String) evalAttr("header", getHeader(),
                                           String.class));
          } catch (NullAttributeException ex) {
              setHeader(null);
          }
  
          try {
              setName((String) evalAttr("name", getName(), String.class));
          } catch (NullAttributeException ex) {
              setName(null);
          }
  
          try {
              setParameter((String) evalAttr("parameter", getParameter(),
                                             String.class));
          } catch (NullAttributeException ex) {
              setParameter(null);
          }
  
          try {
              setProperty((String) evalAttr("property", getProperty(),
                                            String.class));
          } catch (NullAttributeException ex) {
              setProperty(null);
          }
  
          try {
              setRole((String) evalAttr("role", getRole(), String.class));
          } catch (NullAttributeException ex) {
              setRole(null);
          }
  
          try {
              setScope((String) evalAttr("scope", getScope(), String.class));
          } catch (NullAttributeException ex) {
              setScope(null);
          }
  
          try {
              setUser((String) evalAttr("user", getUser(), String.class));
          } catch (NullAttributeException ex) {
              setUser(null);
          }
      }
  }
  
  
  
  1.2       +211 -0    
jakarta-struts/contrib/struts-el/doc/userGuide/struts-logic-el.xml
  
  Index: struts-logic-el.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/contrib/struts-el/doc/userGuide/struts-logic-el.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- struts-logic-el.xml       26 Sep 2002 04:54:39 -0000      1.1
  +++ struts-logic-el.xml       25 Oct 2002 04:45:01 -0000      1.2
  @@ -635,6 +635,217 @@
   
     </tag>
   
  +  <tag>
  +
  +    <name>notPresent</name>
  +    <summary>
  +    Generate the nested body content of this tag if the specified
  +    value is not present in this request.
  +    </summary>
  +    <tagclass>org.apache.strutsel.taglib.logic.ELNotPresentTag</tagclass>
  +    <bodycontent>JSP</bodycontent>
  +    <info>
  +    <p>Depending on which attribute is specified, this tag checks the
  +    current request, and evaluates the nested body content of this tag
  +    only if the specified value <strong>is not</strong> present.  Only one
  +    of the attributes may be used in one occurrence of this tag, unless
  +    you use the <code>property</code> attribute, in which case the
  +    <code>name</code> attribute is also required.</p>
  +    </info>
  +
  +    <attribute>
  +      <name>cookie</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of a cookie with the specified name.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>header</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of an HTTP header with the specified
  +      name.  The name match is performed in a case insensitive manner.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>name</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of a JSP bean, in any scope, with the
  +      specified name.  If <code>property</code> is also specified, checks
  +      for a non-null property value for the specified property.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>parameter</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of at least one occurrence of the
  +      specified request parameter on this request, even if the parameter
  +      value is a zero-length string.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>property</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of a non-null property value, returned
  +      by a property getter method on the JSP bean (in any scope) that is
  +      specified by the <code>name</code> attribute.  Property references
  +      can be simple, nested, and/or indexed.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>role</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks whether the currently authenticated user (if any) has been
  +      associated with the specified security role.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>scope</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>The bean scope within which to search for the bean named by the
  +      <code>name</code> property, or "any scope" if not specified.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>user</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks whether the currently authenticated user principal has the
  +      specified name.</p>
  +      </info>
  +    </attribute>
  +
  +  </tag>
  +
  +
  +  <tag>
  +
  +    <name>present</name>
  +    <summary>
  +    Generate the nested body content of this tag if the specified
  +    value is present in this request.
  +    </summary>
  +    <tagclass>org.apache.strutsel.taglib.logic.ELPresentTag</tagclass>
  +    <bodycontent>JSP</bodycontent>
  +    <info>
  +    <p>Depending on which attribute is specified, this tag checks the
  +    current request, and evaluates the nested body content of this tag
  +    only if the specified value <strong>is</strong> present.  Only one
  +    of the attributes may be used in one occurrence of this tag, unless
  +    you use the <code>property</code> attribute, in which case the
  +    <code>name</code> attribute is also required.</p>
  +    </info>
  +
  +    <attribute>
  +      <name>cookie</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of a cookie with the specified name.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>header</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of an HTTP header with the specified
  +      name.  The name match is performed in a case insensitive manner.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>name</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of a JSP bean, in any scope, with the
  +      specified name.  If <code>property</code> is also specified, checks
  +      for a non-null property value for the specified property.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>parameter</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of at least one occurrence of the
  +      specified request parameter on this request, even if the parameter
  +      value is a zero-length string.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>property</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks for the existence of a non-null property value, returned
  +      by a property getter method on the JSP bean (in any scope) that is
  +      specified by the <code>name</code> attribute.  Property references
  +      can be simple, nested, and/or indexed.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>role</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks whether the currently authenticated user (if any) has been
  +      associated with any of the specified security roles. Use a comma-delimited
  +      list to check for multiple roles. Example:
  +      <code>&lt;logic-el:present role="role1,role2,role3"&gt;
  +                code.....
  +            &lt;/logic-el:present&gt;</code></p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>scope</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>The bean scope within which to search for the bean named by the
  +      <code>name</code> property, or "any scope" if not specified.</p>
  +      </info>
  +    </attribute>
  +
  +    <attribute>
  +      <name>user</name>
  +      <required>false</required>
  +      <rtexprvalue>false</rtexprvalue>
  +      <info>
  +      <p>Checks whether the currently authenticated user principal has the
  +      specified name.</p>
  +      </info>
  +    </attribute>
  +
  +  </tag>
  +
           <tag>
   
                   <name>redirect</name>
  
  
  
  1.4       +1 -1      jakarta-struts/contrib/struts-el/web/exercise-taglib/index.jsp
  
  Index: index.jsp
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/contrib/struts-el/web/exercise-taglib/index.jsp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- index.jsp 14 Oct 2002 03:25:19 -0000      1.3
  +++ index.jsp 25 Oct 2002 04:45:01 -0000      1.4
  @@ -32,6 +32,7 @@
   <ul>
   <li><a href="logic-iterate.jsp">Iterate Tag</a>[<a 
href="showSource.jsp?path=/logic-iterate.jsp">Source</a>]</li>
   <li><a href="logic-match.jsp?param1=value1">Match Tags</a>[<a 
href="showSource.jsp?path=/logic-match.jsp">Source</a>]</li>
  +<li><a href="logic-present.jsp?param1=value1">Presence Tags</a>[<a 
href="showSource.jsp?path=/logic-present.jsp">Source</a>]</li>
   <li><a href="logic-redirect.jsp">&lt;logic:redirect&gt;</a>[<a 
href="showSource.jsp?path=/logic-redirect.jsp">Source</a>]</li>
   </ul>
   
  @@ -48,7 +49,6 @@
   <h3>LOGIC Tags</h3>
   <ul>
   <li><a href="logic-compare.jsp">Comparison Tags</a>[<a 
href="showSource.jsp?path=/logic-compare.jsp">Source</a>]</li>
  -<li><a href="logic-present.jsp?param1=value1">Presence Tags</a>[<a 
href="showSource.jsp?path=/logic-present.jsp">Source</a>]</li>
   <li><a href="logic-empty.jsp">Emptiness Tags</a>[<a 
href="showSource.jsp?path=/logic-empty.jsp">Source</a>]</li>
   </ul>
   </body>
  
  
  
  1.2       +15 -2     
jakarta-struts/contrib/struts-el/web/exercise-taglib/logic-present.jsp
  
  Index: logic-present.jsp
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/contrib/struts-el/web/exercise-taglib/logic-present.jsp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- logic-present.jsp 26 Sep 2002 04:54:41 -0000      1.1
  +++ logic-present.jsp 25 Oct 2002 04:45:01 -0000      1.2
  @@ -2,15 +2,16 @@
   <%@ page language="java" %>
   <%@ taglib uri="/WEB-INF/struts-html-el.tld"  prefix="html-el"  %>
   <%@ taglib uri="/WEB-INF/struts-bean-el.tld"  prefix="bean-el" %>
  +<%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %>
   <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
   <html-el:html>
   <head>
  -<title>Test Replacements for struts presence tags</title>
  +<title>Test Struts presence tags and Replacements</title>
   </head>
   <body bgcolor="white">
   
   <div align="center">
  -<h1>Test Replacements for struts presence tags</h1>
  +<h1>Test Struts presence tags and Replacements</h1>
   </div>
   
   <jsp:useBean id="bean" scope="page" 
class="org.apache.struts.webapp.exercise.TestBean"/>
  @@ -20,6 +21,18 @@
       <th>Test Type</th>
       <th>Correct Value</th>
       <th>Test Result</th>
  +  </tr>
  +  <tr>
  +    <td>Role</td>
  +    <td>notPresent</td>
  +    <td>
  +      <logic-el:present role="fubar">
  +        present
  +      </logic-el:present>
  +      <logic-el:notPresent role="fubar">
  +        notPresent
  +      </logic-el:notPresent>
  +    </td>
     </tr>
     <tr>
       <td>Bean</td>
  
  
  

--
To unsubscribe, e-mail:   <mailto:struts-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-dev-help@;jakarta.apache.org>

Reply via email to