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.
精彩评论