繁体   English   中英

如何在Spring EL中访问List的属性?

[英]How to access List's properties in Spring EL?

EL尝试将属性名称解释为列表索引,但失败。 如果存在,如何访问List的常规bean属性?

更新

我有自己的课

public class Directory extends AbstractList<File> {

    ...

    public Date getInternetLastModified() {
       return internetLastModified;
    }

如您所见,该类既是列表,又具有单独的属性。

当我用XML编写时:

${directory.internetLastModified}

我正在获取NumberFormatException 我对此进行了解释,因为对象是列表,所以EL试图做类似的事情

out.print(directory.get( String.valueOf("internetLastModified" ) )

因此,这使我提出了这个问题。

假设internetLastModified是一个实例方法,创建了一个简单的Directory类,并尝试了SpelExpressionParser看看发生了什么。

public class DirectoryExamplesMain {

    public static final void main(String[] args) {
        ExpressionParser parser = new SpelExpressionParser();
        org.springframework.expression.Expression exp = null;

        Directory dir = new Directory();

        // Literal
        exp = parser.parseExpression("internetLastModified");
        Date d = exp.getValue(dir, Date.class);
        System.out.format("internetLastModified", d);


    }
}

我得到的结果是internetLastModified [Fri May 03 15:40:44 CDT 2013]

如果directory是bean,请考虑使用"@directory.internetLastModified"作为表达式。 您可以在参考手册的7.5节中找到类似的示例。

这是测试的一种简单方法。

import java.util.Date;

import org.springframework.expression.AccessException;
import org.springframework.expression.BeanResolver;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

public class DirectoryExamplesMain {

    public static final void main(String[] args) {
        final ExpressionParser parser = new SpelExpressionParser();

    // Bean references
    final StandardEvaluationContext context = new StandardEvaluationContext();
    context.setBeanResolver(
        new BeanResolver() {
        @Override
        public Object resolve(EvaluationContext arg0, String arg1)
            throws AccessException {
             return new Directory();
    }});

    System.out.format("%s [%s]%n","@directory.internetLastModified",  parser.parseExpression("@directory.internetLastModified").getValue(context));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM