<logic:empty>一般用于判断在某个collection是否为空,参考以下列子
<logic:empty name="nameList">
...
</logic:empty>
该句子等同于:
if (nameList.isEmpty()) {
   ...
}
请注意他与<logic:present>的区别(nameList != null)

解决方案 »

  1.   

    ----------jsp start---------><%@ page language="java" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <html>
    <head>
    <title>Test struts-logic Emptiness Tags</title>
    </head>
    <body bgcolor="white"><div align="center">
    <h1>Test struts-logic Emptiness Tags</h1>
    </div><jsp:useBean id="bean" scope="page" class="org.apache.struts.webapp.exercise.TestBean"/><table border="1">
      <tr>
        <th>Test Type</th>
        <th>Correct Value</th>
        <th>Test Result</th>
      </tr>
      <tr>
        <td>missing bean, no property attribute</td>
        <td>empty</td>
        <td>
          <logic:empty name="missingBean">
            empty
          </logic:empty>
          <logic:notEmpty name="missingBean">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>
      <tr>
        <td>not-missing bean, no property attribute</td>
        <td>notEmpty</td>
        <td>
          <logic:empty name="bean">
            empty
          </logic:empty>
          <logic:notEmpty name="bean">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>  <tr>
        <td>null</td>
        <td>empty</td>
        <td>
          <logic:empty name="bean" property="nullProperty">
            empty
          </logic:empty>
          <logic:notEmpty name="bean" property="nullProperty">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>
      <tr>
        <td>empty string</td>
        <td>empty</td>
        <td>
          <logic:empty name="bean" property="emptyStringProperty">
            empty
          </logic:empty>
          <logic:notEmpty name="bean" property="emptyStringProperty">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>
      <tr>
        <td>non-empty string</td>
        <td>notEmpty</td>
        <td>
          <logic:empty name="bean" property="stringProperty">
            empty
          </logic:empty>
          <logic:notEmpty name="bean" property="stringProperty">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>
      <tr>
        <td>empty collection</td>
        <td>empty</td>
        <td>
          <logic:empty name="bean" property="emptyListProperty">
            empty
          </logic:empty>
          <logic:notEmpty name="bean" property="emptyListProperty">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>
      <tr>
        <td>non-empty collection</td>
        <td>notEmpty</td>
        <td>
          <logic:empty name="bean" property="listProperty">
            empty
          </logic:empty>
          <logic:notEmpty name="bean" property="listProperty">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>
      <tr>
        <td>empty map</td>
        <td>empty</td>
        <td>
          <logic:empty name="bean" property="emptyMapProperty">
            empty
          </logic:empty>
          <logic:notEmpty name="bean" property="emptyMapProperty">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>
      <tr>
        <td>non-empty map</td>
        <td>notEmpty</td>
        <td>
          <logic:empty name="bean" property="mapProperty">
            empty
          </logic:empty>
          <logic:notEmpty name="bean" property="mapProperty">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>
      <tr>
        <td>unsupported object</td>
        <td>notEmpty</td>
        <td>
          <logic:empty name="bean" property="intProperty">
            empty
          </logic:empty>
          <logic:notEmpty name="bean" property="intProperty">
            notEmpty
          </logic:notEmpty>
        </td>
      </tr>
    </table></body>
    </html>
    <--------jsp end--------------
      

  2.   

    ----------java start--------->
    package org.apache.struts.webapp.exercise;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Vector;
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.util.LabelValueBean;
    /**
     * General purpose test bean for Struts custom tag tests.
     *
     * @author Craig R. McClanahan
     * @author Martin F N Cooper
     * @version $Revision: 1.8 $ $Date: 2002/10/12 19:21:18 $
     */public class TestBean extends ActionForm {    /**
         * A collection property where the elements of the collection are
         * of type <code>LabelValueBean</code>.
         */
        private Collection beanCollection = null;    public Collection getBeanCollection() {
            if (beanCollection == null) {
                Vector entries = new Vector(10);            entries.add(new LabelValueBean("Label 0", "Value 0"));
                entries.add(new LabelValueBean("Label 1", "Value 1"));
                entries.add(new LabelValueBean("Label 2", "Value 2"));
                entries.add(new LabelValueBean("Label 3", "Value 3"));
                entries.add(new LabelValueBean("Label 4", "Value 4"));
                entries.add(new LabelValueBean("Label 5", "Value 5"));
                entries.add(new LabelValueBean("Label 6", "Value 6"));
                entries.add(new LabelValueBean("Label 7", "Value 7"));
                entries.add(new LabelValueBean("Label 8", "Value 8"));
                entries.add(new LabelValueBean("Label 9", "Value 9"));            beanCollection = entries;
            }        return (beanCollection);
        }    public void setBeanCollection(Collection beanCollection) {
            this.beanCollection = beanCollection;
        }
        /**
         * A multiple-String SELECT element using a bean collection.
         */
        private String[] beanCollectionSelect = { "Value 1", "Value 3",
                                                  "Value 5" };    public String[] getBeanCollectionSelect() {
            return (this.beanCollectionSelect);
        }    public void setBeanCollectionSelect(String beanCollectionSelect[]) {
            this.beanCollectionSelect = beanCollectionSelect;
        }
        /**
         * A boolean property whose initial value is true.
         */
        private boolean booleanProperty = true;    public boolean getBooleanProperty() {
            return (booleanProperty);
        }    public void setBooleanProperty(boolean booleanProperty) {
            this.booleanProperty = booleanProperty;
        }
        /**
         * A multiple-String SELECT element using a collection.
         */
        private String[] collectionSelect = { "Value 2", "Value 4",
                                              "Value 6" };    public String[] getCollectionSelect() {
            return (this.collectionSelect);
        }    public void setCollectionSelect(String collectionSelect[]) {
            this.collectionSelect = collectionSelect;
        }
        /**
         * A double property.
         */
        private double doubleProperty = 321.0;    public double getDoubleProperty() {
            return (this.doubleProperty);
        }    public void setDoubleProperty(double doubleProperty) {
            this.doubleProperty = doubleProperty;
        }
        /**
         * A boolean property whose initial value is false
         */
        private boolean falseProperty = false;    public boolean getFalseProperty() {
            return (falseProperty);
        }    public void setFalseProperty(boolean falseProperty) {
            this.falseProperty = falseProperty;
        }
        /**
         * A float property.
         */
        private float floatProperty = (float) 123.0;    public float getFloatProperty() {
            return (this.floatProperty);
        }    public void setFloatProperty(float floatProperty) {
            this.floatProperty = floatProperty;
        }
      

  3.   

    /**
         * Integer arrays that are accessed as an array as well as indexed.
         */
        private int intArray[] = { 0, 10, 20, 30, 40 };    public int[] getIntArray() {
            return (this.intArray);
        }    public void setIntArray(int intArray[]) {
            this.intArray = intArray;
        }    private int intIndexed[] = { 0, 10, 20, 30, 40 };    public int getIntIndexed(int index) {
            return (intIndexed[index]);
        }    public void setIntIndexed(int index, int value) {
            intIndexed[index] = value;
        }
        private int intMultibox[] = new int[0];    public int[] getIntMultibox() {
            return (this.intMultibox);
        }    public void setIntMultibox(int intMultibox[]) {
            this.intMultibox = intMultibox;
        }    /**
         * An integer property.
         */
        private int intProperty = 123;    public int getIntProperty() {
            return (this.intProperty);
        }    public void setIntProperty(int intProperty) {
            this.intProperty = intProperty;
        }
        /**
         * A long property.
         */
        private long longProperty = 321;    public long getLongProperty() {
            return (this.longProperty);
        }    public void setLongProperty(long longProperty) {
            this.longProperty = longProperty;
        }
        /**
         * A multiple-String SELECT element.
         */
        private String[] multipleSelect = { "Multiple 3", "Multiple 5",
                                            "Multiple 7" };    public String[] getMultipleSelect() {
            return (this.multipleSelect);
        }    public void setMultipleSelect(String multipleSelect[]) {
            this.multipleSelect = multipleSelect;
        }
        /**
         * A nested reference to another test bean (populated as needed).
         */
        private TestBean nested = null;    public TestBean getNested() {
            if (nested == null)
                nested = new TestBean();
            return (nested);
        }
        /**
         * A String property with an initial value of null.
         */
        private String nullProperty = null;    public String getNullProperty() {
            return (this.nullProperty);
        }    public void setNullProperty(String nullProperty) {
            this.nullProperty = nullProperty;
        }
        /**
         * A short property.
         */
        private short shortProperty = (short) 987;    public short getShortProperty() {
            return (this.shortProperty);
        }    public void setShortProperty(short shortProperty) {
            this.shortProperty = shortProperty;
        }
        /**
         * A single-String value for a SELECT element.
         */
        private String singleSelect = "Single 5";    public String getSingleSelect() {
            return (this.singleSelect);
        }    public void setSingleSelect(String singleSelect) {
            this.singleSelect = singleSelect;
        }
        /**
         * String arrays that are accessed as an array as well as indexed.
         */
        private String stringArray[] =
        { "String 0", "String 1", "String 2", "String 3", "String 4" };    public String[] getStringArray() {
            return (this.stringArray);
        }    public void setStringArray(String stringArray[]) {
            this.stringArray = stringArray;
        }    private String stringIndexed[] =
        { "String 0", "String 1", "String 2", "String 3", "String 4" };    public String getStringIndexed(int index) {
            return (stringIndexed[index]);
        }    public void setStringIndexed(int index, String value) {
            stringIndexed[index] = value;
        }
        private String stringMultibox[] = new String[0];    public String[] getStringMultibox() {
            return (this.stringMultibox);
        }    public void setStringMultibox(String stringMultibox[]) {
            this.stringMultibox = stringMultibox;
        }    /**
         * A String property.
         */
        private String stringProperty = "This is a string";    public String getStringProperty() {
            return (this.stringProperty);
        }    public void setStringProperty(String stringProperty) {
            this.stringProperty = stringProperty;
        }    /**
         * An empty String property.
         */
        private String emptyStringProperty = "";    public String getEmptyStringProperty() {
            return (this.emptyStringProperty);
        }    public void setEmptyStringProperty(String emptyStringProperty) {
            this.emptyStringProperty = emptyStringProperty;
        }
        /**
         * A single-String value for a SELECT element based on resource strings.
         */
        private String resourcesSelect = "Resources 2";    public String getResourcesSelect() {
            return (this.resourcesSelect);
        }    public void setResourcesSelect(String resourcesSelect) {
            this.resourcesSelect = resourcesSelect;
        }
        /**
         * A property that allows a null value but is still used in a SELECT.
         */
        private String withNulls = null;    public String getWithNulls() {
            return (this.withNulls);
        }    public void setWithNulls(String withNulls) {
            this.withNulls = withNulls;
        }/**
         * A List property.
         */
        private List listProperty = null;    public List getListProperty() {
            if (listProperty == null) {
                listProperty = new ArrayList();
                listProperty.add("dummy");
            }
            return listProperty;
        }    public void setListProperty(List listProperty) {
            this.listProperty = listProperty;
        }    /**
         * An empty List property.
         */
        private List emptyListProperty = null;    public List getEmptyListProperty() {
            if (emptyListProperty == null) {
                emptyListProperty = new ArrayList();
            }
            return emptyListProperty;
        }    public void setEmptyListProperty(List emptyListProperty) {
            this.emptyListProperty = emptyListProperty;
        }
        /**
         * A Map property.
         */
        private Map mapProperty = null;    public Map getMapProperty() {
            if (mapProperty == null) {
                mapProperty = new HashMap();
                mapProperty.put("dummy", "dummy");
            }
            return mapProperty;
        }    public void setMapProperty(Map mapProperty) {
            this.mapProperty = mapProperty;
        }    /**
         * An empty Map property.
         */
        private Map emptyMapProperty = null;    public Map getEmptyMapProperty() {
            if (emptyMapProperty == null) {
                emptyMapProperty = new HashMap();
            }
            return emptyMapProperty;
        }    public void setEmptyMapProperty(Map emptyMapProperty) {
            this.emptyMapProperty = emptyMapProperty;
        }
        // --------------------------------------------------------- Public Methods
        /**
         * Reset the properties that will be received as input.
         */
        public void reset(ActionMapping mapping, HttpServletRequest request) {        booleanProperty = false;
            collectionSelect = new String[0];
            intMultibox = new int[0];
            multipleSelect = new String[0];
            stringMultibox = new String[0];
            if (nested != null)
                nested.reset(mapping, request);    }
    }<--------java end--------------