我花了很多时间弄清楚如何使用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";
}
}
最佳答案
这里,
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!从DAO获得列表后,将
request.setAttribute("recentTopics", list);
移至,它应该可以工作。您的EL很好。