【问题标题】:How to access List's properties in Spring EL?如何在 Spring EL 中访问 List 的属性?
【发布时间】:2013-04-27 21:01:16
【问题描述】:

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" ) )

所以这导致我问这个问题。

【问题讨论】:

  • 我不明白你。您是否尝试从您的模型中打印列表条目?
  • 你是如何访问它的?
  • 您能否提供一个示例来说明您试图从列表中获得什么?
  • 我只是想确认您打算 getInternetLastModified 是一个实例方法。是这样吗?

标签: java spring properties javabeans el


【解决方案1】:

假设 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]

如果目录是一个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));
}

【讨论】:

    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2016-01-29
    • 2019-10-23
    • 2019-05-07
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多