EL尝试将属性名称解释为List索引并失败。如果List的普通bean属性存在,如何访问它们?
更新
我有自己的班级
public class Directory extends AbstractList<File> {
...
public Date getInternetLastModified() {
return internetLastModified;
}
如您所见,此类既是列表又具有单独的属性。
当我用XML写作时:
${directory.internetLastModified}
我得到了NumberFormatException
。我解释了这一点,因为一个对象是一个List,EL试图做类似
out.print(directory.get( String.valueOf("internetLastModified" ) )
所以这引出我提出这个问题。
答案 0 :(得分:0)
假设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));
}