2013-05-03 17 views
0

EL嘗試將屬性名稱解釋爲List索引並失敗。如何訪問List的普通bean屬性(如果它們存在)?如何在Spring EL中訪問List的屬性?

UPDATE

我有我自己的類

public class Directory extends AbstractList<File> { 

    ... 

    public Date getInternetLastModified() { 
     return internetLastModified; 
    } 

正如你看到這個類是既列表,並有單獨的屬性。

當我在XML中寫道:

${directory.internetLastModified} 

我得到NumberFormatException。我解釋這一點,因爲一個對象是一個列表,EL正在嘗試做類似於

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

所以這導致我問這個問題。

+0

我不明白你的意思。你是否試圖從你的模型打印一個列表條目? – 2013-05-03 12:55:02

+0

你如何訪問它? – Kai 2013-05-03 13:27:52

+0

你能提供一個你想從列表中獲得什麼的例子嗎? – Xenson 2013-05-03 14:45:42

回答

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)); 
}