我使用的是truts2+hibernate框架
有一个老师表和一个题目表,老师和题目是 1:n是关系Teacher类为:
public class Teachers  implements java.io.Serializable {        private Integer teaId;
private String loginname;
        private Set subjectinfos = new HashSet(0);
        ....
      }Subjectinfo 类为:
public class Subjectinfo  implements java.io.Serializable {
private Integer subId;
private Teachers teachers;
private String subName;
private String subType;
...
    }

Teachers.hbm.xml为:
....
<set name="subjectinfos" inverse="true">
            <key>
                <column name="tea_id" not-null="true" />
            </key>
            <one-to-many class="hibernate.model.Subjectinfo" />
        </set>
..。}
Subectinfo.hbm.xml为:
{
...
<many-to-one name="teachers" class="hibernate.model.Teachers" fetch="select">
            <column name="tea_id" not-null="true" />
        </many-to-one>
...
}    
页面显示:
                  <td><s:property value="subName"/> </td>
        <td><s:property value="subType"/></td>
<td><s:property value=" ???????????????????????????????????????????????????? "/></td我想在页面上显示课程属性的时候,应该怎样显示该课程所对应的老师的名称?问号里填写什么呢?谢谢!

解决方案 »

  1.   


    如下改动:
     <td> <s:property value="subName"/> </td> 
            <td> <s:property value="subType"/> </td> 
    <td> <s:property value="teachers.loginname"/> </td>
      

  2.   

    那个,在many-to-one 中设置了lazy="true"也还是不行!!!
      

  3.   

    那就设为false试一下或者去掉
      

  4.   

    我使用的是truts2+hibernate框架
    有一个老师表和一个题目表,老师和题目是 1:n是关系Teacher类为:
    public class Teachers  implements java.io.Serializable {        private Integer teaId;
            private String loginname;
            private String teaName;
            private Set subjectinfos = new HashSet(0);
            ....
          }Subjectinfo 类为:
    public class Subjectinfo  implements java.io.Serializable {
    private Integer subId;
    private Teachers teachers;
    private String subName;
    private String subType;
    ...
        }Teachers.hbm.xml为:
    ....
    <set name="subjectinfos" inverse="true">
                <key>
                    <column name="tea_id" not-null="true" />
                </key>
                <one-to-many class="hibernate.model.Subjectinfo" />
            </set>
    ..。}
    Subectinfo.hbm.xml为:
    {
    ...
    <many-to-one name="teachers" class="hibernate.model.Teachers" fetch="select">
                <column name="tea_id" not-null="true" />
            </many-to-one>
    ...

    页面显示:
                      <td> <s:property value="subName"/> </td>
            <td> <s:property value="subType"/> </td>
    <td> <s:property value=" teachers.teaName "/> </td
    teachers.teaName 这个语句为什么不能显示出老师名字呢?????????????
    首先:href="subjectall.action"
    truts.xml:
    <action name="subjectall" class="struts2.action.SubjectInfoAction" method="FindAllSubject">
    <result name="success">/students/subject/subjectList.jsp </result>
    <result name="error">/error.jsp </result>
    </action>
    SubjectInfoAction类:
    {
      private Teachers teachers ;
      private String subName ;
      private String subType ;  private int t_totalpage;
      private int currentpage;
      private List list;
      ....省略get set
      public String FindAllSubject() throws Exception{
    try{
    AllSubjectUtil page = new AllSubjectUtil();
    String hql = "from Subjectinfo" ;
            list = page.QueryList(hql) ;
    this.t_totalpage=page.totalPage;
    this.currentpage=page.currentPage;
    return SUCCESS ;
    }catch(Exception e){
    e.printStackTrace() ;
    return ERROR ;
    }
    }
    }
    AllSubjectUtil 类为:
    public class AllSubjectUtil extends ActionSupport {
    private Session s = null;
    private List list;
    public static int totalPage;// 页面总数
    private int totalCount;// 用户总数
    private int pageSize;// 每页显示数据量
    public static int currentPage;// 当前页码数public AllSubjectUtil() {this.s = HibernateSessionFactory .createSession() ;
    }/*
    * 功 能:获取总记录数 参 数:持久化对象名 返回值:int
    */
    public int getUserTotalCount(String tablename) {Query q = s.createQuery("select count(*) from " + tablename );
    List ll = q.list();
    Integer a = (Integer) ll.get(0);
    return a.intValue();
    }/*
    * 功 能:获取总页数 参 数:pageSize(每页显示数据量) 返回值:int
    */
    public int getTotalPage(int pageSize) {
    totalCount = getUserTotalCount("Subjectinfo");
    totalPage = ((totalCount + pageSize) - 1) / pageSize;
    return totalPage;
    }/*
    * 功 能:分页显示数据 参 数:hql , pageNum-第几页 , pageSize-每页条数 返回值:List
    */
    public List pagination(String hql, int pageNum, int pageSize) {
    int numBegin = 0;
    if (pageNum < 1) {
    numBegin = 0;
    } else {
    numBegin = (pageNum - 1) * pageSize;
    }
    List retList = new ArrayList();
    try {
    Query query = s.createQuery(hql);
    query.setFirstResult(numBegin);
    query.setMaxResults(pageSize);
    retList = query.list();
    return retList;
    } catch (HibernateException e) {
    e.printStackTrace();
    } finally {
    try
                                  HibernateSessionFactory .closeSession() ;这条语句注释掉居然可以输出老师名称,但是程序很不稳定,就是表格显示题目的时候有时候出现错误?????? 觉得应该还是关闭安全点?????????????????????????????????????????????????????
    } catch (HibernateException e) {
    e.printStackTrace();
    }
    }
    return retList;
    }public List QueryList(String hql){
    pageSize = 3;
    HttpServletRequest request = ServletActionContext.getRequest();
    String pageString = request.getParameter("page");
    if (pageString == null || pageString.length() == 0) {
    pageString = "1";
    }
    currentPage = 0;
    try {
    currentPage = Integer.parseInt(pageString);
    } catch (Exception e) {
    e.printStackTrace();
    }
    if (currentPage == 0) {
    currentPage = 1;
    }
    totalPage = getTotalPage(pageSize);
    totalCount = getTotalCount();
    currentPage = currentPage;
    list = this.pagination(hql, currentPage, pageSize);
    return list;
    }
    subjectList.jsp
    <s:iterator id="ls" value="list" status="st">
    <tr>
    <td> <%=i++ %> <br> </td>
                    <td> <s:property value="subName"/> <br> </td> 可以输出
    <td>  <s:property value="subType"/> <br> </td>可以输出
    <td> <s:if test="difficult='0'">B </s:if > <s:else>A </s:else> <br> </td>
        <td>&nbsp; <s:property value="teachers.teaName"/> </td> 去掉那个关闭session语句就可以,否则不行也试着在<set ... 加lazy=**>还是不行