What is the syntax for EL that accesses List with object?
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.
精彩评论