用对象访问List的EL的语法是什么?

时间:2010-09-24 01:01:44

标签: java jsp servlets el

我很难弄清楚如何使用EL表达式在ArrayList中显示对象的属性。

许多外面的教程显示了简单的例子:

List<String> test = new ArrayList<String>();
request.setAttribute("test", test);
test.add("moo");

它运作正常。

<p>${test[0]}</p>

当ArrayList包含具有属性的实际对象时,该值不会显示。 下面的代码获取查询结果并存储到数据传输对象“DTOTopics”中 我将对象添加到ArrayList中。

    List<DTOTopics> list = new ArrayList<DTOTopics>();
    request.setAttribute("recentTopics", list);
    list = factory.getDAOTopics().findByLimit(5);

HTML

ArrayList中的每个元素都是对象DTOTopics,因此我尝试访问其中一个属性“title”,并且页面上没有显示任何内容。

<h1>${recentTopics[0].title}</h1> //why this doesn't work???

的Servlet

public class ShowRecentTopicsAction implements Action {

 @Override
 public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {

  DAOFactory factory = null;
  List<DTOTopics> list = new ArrayList<DTOTopics>();
  request.setAttribute("recentTopics", list);

  try {
   factory = DAOFactory.getInstance();
   list = factory.getDAOTopics().findByLimit(5);
  } 
  catch (DAOConfigurationException e) {
   Logger.log(e.getMessage() + " DAOConfEx, PostRegisterServlet.java.", e.getCause().toString());
  }
  catch (DAOException e) {
   Logger.log(e.getMessage()+ " DAOEx, PostRegisterServlet.java", e.getCause().toString());
  }

  System.out.println("getRecentTopics() list = " + list);//just check if list returns null

            //for testing
  DTOTopics t = list.get(0);
  System.out.println("TEST:::" + t.getTitle()); //ok

            //these test works fine too
  List<String> test = new ArrayList<String>();
  request.setAttribute("test", test);
  test.add("moo");
  Map<String, String> map = new HashMap<String, String>();
  request.setAttribute("mmm", map);
  map.put("this", "that");

  return "bulletinboard";
 }

}

1 个答案:

答案 0 :(得分:1)

下面,

List<DTOTopics> list = new ArrayList<DTOTopics>();
request.setAttribute("recentTopics", list);

你在请求范围内放置了一个空的arraylist。

然后,

try {
    factory = DAOFactory.getInstance();
    list = factory.getDAOTopics().findByLimit(5);

您正在使用 arraylist重新分配list引用(而不是使用add()addAll()方法填充原始arraylist)。请求范围中的那个仍然引用原始的空arraylist!

在之后将request.setAttribute("recentTopics", list);移至,您已从DAO获取列表,它应该可以正常工作。你的EL非常好。