持久化层使用Hibernate。
表示层使用Struts,没有创建任何FormBean。
Action是这样的:
public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
   Person p = new Person();
   List personList = PersonDao.searchPerson(p);
   HttpSession session = request.getSession();
   session.setAttribute("personList", personList);
   return mapping.findForward("list_persons");
}
在list_persons.jsp页面上:
<logic:iterate id="person" name="personList">,迭代出personList中的一个元素,就放到person里面,它居然可以直接找到person对应的Person实体类(POJO)。是否它从personList中取出来的时候,就已经知道是一个Person对象了,从而知道Person的属性了,所以在使用<bean:write name="person" property="userid"/>的时候,直接把userid的值输出到页面上?请高手解释一下这其中的原理机制,谢谢。

解决方案 »

  1.   

    其实里头就是写了一个for循环,而已,而已taglib而已,自己也可以随便写。
      

  2.   

    我的意思是:
    如何根据id="person" 知道它是Person实体类(POJO),如果不知道是Person.java怎么找到它对应的属性?
    为何它不认为是“person”是指Integer类呢???
      

  3.   

    看你的代码:List personList = PersonDao.searchPerson(p);
    searchPerson方法返回的应该是Person对象的列表,iterator标签迭代时,会取得列表中每个对象的类属性(obj.class),这样不就是知道该对象是哪个类了吗?你在用<bean:write>输出属性,那就直接调用该对象的toString()方法了。
      

  4.   

    <logic:iterate id="person" name="personList"> ,
    迭代出personList中的一个元素,
    它会调会框架底层的(拦截器)栈根据List personList = PersonDao.searchPerson(p);它会匹配属性
    ,当你在页面用bean:write name="person" property="userid"/>取值时,会根据属性来iterate出来,
    而这时的iterate在底层就是一个for,推荐你看一个李刚的j2ee开发有节是写自定义标签开发的