开发者

What is the syntax for EL that accesses List with object?

开发者 https://www.devze.com 2023-01-17 14:47 出处:网络
I\'m having tough time figure out how to display object\'s properties in ArrayList using EL expression.

I'm having tough time figure out how to display object's properties in ArrayList using EL expression.

Many tutorial outside shows simple example like:

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

And it works fine.

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

When the ArrayList contains actual object with properties, th开发者_C百科e value does not show up. The code below gets the query result and store into Data Transfer Object "DTOTopics" then I add the object into the ArrayList.

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

HTML

Each element in ArrayList is the object DTOTopics, so I tried to access to one of its properties "title" and nothing shows up on the page.

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

}


Here,

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

you're putting an empty arraylist in the request scope.

And then,

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

you're reassigning the list reference with a new arraylist (instead of filling the original arraylist using add() or addAll() method). The one in the request scope still refers to the original empty arraylist!

Move request.setAttribute("recentTopics", list); to after you've obtained the list from the DAO and it should work. Your EL is perfectly fine.

0

精彩评论

暂无评论...
验证码 换一张
取 消