关于页面循环枚举的用法及原理

来源:互联网 发布:软件怎么加注册码 编辑:程序博客网 时间:2024/06/11 00:13

1.用法

1.1定义枚举ESex.java

package com.funi.core.gov.enumeration;public enum ESex {    //男    MAN,    //女    WOMAN}

1.2枚举属性文件中定义枚举描述 resource/config/env/enum.properties

com.funi.core.gov.enumeration.ESex.MAN=男
com.funi.core.gov.enumeration.ESex.WOMAN=女

1.3jsp页面循环使用方法

<select name="sex">    <p:enumEach enum="com.funi.core.gov.enumeration.ESex" var="e">        <option value="${e.name}">${e.description}</option>    </p:enumEach></select>


1.enum="" 值为枚举全名

2.${e.name} 为枚举的值,如MAN,WOMAN
3.${e.description} 为枚举定义的描述值,如 男,女

2. 相关类及配置文件

2.1 EnumEachTag枚举循环tag类

package com.funi.property.gov.web.tag;import com.funi.core.gov.support.EnumItem;import com.funi.property.gov.web.support.EnumConfigure;import org.apache.taglibs.standard.tag.common.core.ForEachSupport;import javax.servlet.jsp.JspTagException;import javax.servlet.jsp.jstl.core.LoopTag;import javax.servlet.jsp.tagext.IterationTag;import java.util.ArrayList;import java.util.List;/** * User: niuzhihuan * Date: 14-9-9 * DESC: 枚举循环tag类 */public class EnumEachTag extends ForEachSupport implements LoopTag, IterationTag {    // for tag attribute    public void setBegin(int begin) throws JspTagException {        this.beginSpecified = true;        this.begin = begin;        validateBegin();    }    // for tag attribute    public void setEnd(int end) throws JspTagException {        this.endSpecified = true;        this.end = end;        validateEnd();    }    // for tag attribute    public void setStep(int step) throws JspTagException {        this.stepSpecified = true;        this.step = step;        validateStep();    }    public void setEnum(String enumClassName) throws JspTagException {        // for null items, simulate an empty list        rawItems = new ArrayList();        try {            Class e = this.getClass().getClassLoader().loadClass(enumClassName);            if (e.isEnum()) {                List<EnumItem> enumItemList = new ArrayList<EnumItem>();                Enum[] enums = (Enum[]) e.getEnumConstants();                for (Enum en : enums) {                    enumItemList.add(new EnumItem(en.name(), EnumConfigure.getDescription(en)));                }                rawItems = enumItemList;            } else {                rawItems = new ArrayList();            }        } catch (ClassNotFoundException c) {            c.printStackTrace();        }    }}


2.2 EnumConfigure读取properties文件,返回指定的枚举描述信息

package com.funi.property.gov.web.support;import org.springframework.context.NoSuchMessageException;import org.springframework.context.support.MessageSourceAccessor;import org.springframework.context.support.ResourceBundleMessageSource;import java.util.Locale;/** * Created by niu on 2014/9/4. * 读取properties文件,返回指定的枚举描述信息 */public class EnumConfigure extends ResourceBundleMessageSource {    private static MessageSourceAccessor messageSourceAccessor;    private EnumConfigure() {        setBasenames(new String[]{"config/env/enum"});    }    private static MessageSourceAccessor getAccessor() {        if (messageSourceAccessor == null)            messageSourceAccessor = new MessageSourceAccessor(new EnumConfigure(), Locale.getDefault());        return messageSourceAccessor;    }    public static String getDescription(Enum e) {        if (e == null) return null;        try {            return getAccessor().getMessage(e.getClass().getName().concat(".").concat(e.name()));        } catch (NoSuchMessageException ex) {            return null;        }    }}


2.3 EnumItem Enum的name 和 description描述信息Dto

package com.funi.core.gov.support;/** * User: niuzhihuan * Date: 14-9-9 * Enum的name 和 description描述信息Dto */public class EnumItem {    /**     * 枚举名称     */    private String name;    /**     * 枚举描述     */    private String description;    public EnumItem(String name, String description) {        this.name = name;        this.description = description;    }    public String getName() {        return name;    }    public String getDescription() {        return description;    }}


2.4 resource/config/env/enum.properties

记录枚举值和对应的描述信息

com.funi.core.gov.enumeration.ESex.MAN=男
com.funi.core.gov.enumeration.ESex.WOMAN=女

2.5 WEB-INF/tlds/property.tld 配置tag信息

<tag>        <name>enumEach</name>        <tag-class>com.funi.property.gov.web.tag.EnumEachTag</tag-class>        <body-content>JSP</body-content>        <attribute>            <name>enum</name>            <required>false</required>            <rtexprvalue>true</rtexprvalue>            <type>java.lang.String</type>        </attribute>        <attribute>            <name>begin</name>            <required>false</required>            <rtexprvalue>true</rtexprvalue>            <type>int</type>        </attribute>        <attribute>            <name>end</name>            <required>false</required>            <rtexprvalue>true</rtexprvalue>            <type>int</type>        </attribute>        <attribute>            <name>step</name>            <required>false</required>            <rtexprvalue>true</rtexprvalue>            <type>int</type>        </attribute>        <attribute>            <name>var</name>            <required>true</required>            <rtexprvalue>false</rtexprvalue>        </attribute>        <attribute>            <name>varStatus</name>            <required>false</required>            <rtexprvalue>false</rtexprvalue>        </attribute>    </tag>


0 0
原创粉丝点击