Java JSTL-添加要调用的参数

Java JSTL-添加要调用的参数,java,jstl,el,jstl-functions,Java,Jstl,El,Jstl Functions,我在JSTL中有以下代码,用于检索j2ee站点中的学生图片 <c:if test="${student.studentPictureId != null}"> <a href="javascript:showImage('<c:out value="${student.studentId}"/>','<c:out value="${student.studentPictureId }"/> </c:if> 我想用枚举调用泛

我在JSTL中有以下代码,用于检索j2ee站点中的学生图片

 <c:if test="${student.studentPictureId != null}">
        <a href="javascript:showImage('<c:out value="${student.studentId}"/>','<c:out value="${student.studentPictureId }"/>
</c:if>
我想用枚举调用泛型函数:
学生类上的函数签名如下所示:

  Student class  
           String getPictureId(PictureTypeEnum picture type)
因此,最终的JSTL代码如下所示:

  <c:if test="${student.getPictureId(PictureTypeEnum.StudentCard) != null}">
        <a href="javascript:showImage('<c:out value="${student.studentId}"/>','<c:out value="${student.getPictureId(PictureTypeEnum.StudentCard)}"/>
</c:if>


直接从JSTL调用方法是不可能的,所以我使用了一种技巧:快速映射:

public abstract class QuickMap<K,V> implements Map<K,V> {
    @Override
    public abstract V get(Object key);

    @Override
    public final int size() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final boolean isEmpty() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final boolean containsKey(Object key) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final boolean containsValue(Object value) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final V put(K key, V value) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final V remove(Object key) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final void putAll(Map<? extends K, ? extends V> m) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final void clear() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final Set<K> keySet() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final Collection<V> values() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final Set<Entry<K, V>> entrySet() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
public抽象类QuickMap实现Map{
@凌驾
公共抽象V-get(对象键);
@凌驾
公共最终整数大小(){
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾
公共最终布尔值isEmpty(){
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾
公共最终布尔containsKey(对象键){
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾
公共最终布尔值containsValue(对象值){
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾
公共最终V输入(K键,V值){
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾
公共最终V删除(对象密钥){
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾

公共最终void putAll(mapel2.2)于2009年推出,并在本机上支持它。请继续前进并赶上版本。如何升级eclipse项目?
 <c:out value="${student.studentPictureId }"/>
public abstract class QuickMap<K,V> implements Map<K,V> {
    @Override
    public abstract V get(Object key);

    @Override
    public final int size() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final boolean isEmpty() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final boolean containsKey(Object key) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final boolean containsValue(Object value) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final V put(K key, V value) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final V remove(Object key) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final void putAll(Map<? extends K, ? extends V> m) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final void clear() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final Set<K> keySet() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final Collection<V> values() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public final Set<Entry<K, V>> entrySet() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
public Map<Object,String> getStudentPictureIds() {
    return new QuickMap<Object,String>() {
        @Override
        public String get(Object k) {
            PictureTypeEnum type;
            if (k instanceof PictureTypeEnum) {
                type = (PictureTypeEnum)k; 
            } else {
                type = PictureTypeEnum.valueOf(k.toString());
            }
            return getStudentPictureId(type);
        }            
    };
}
<c:out value="${student.pictureIds['StudentCard']}"/>