我使用的是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: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我想在页面上显示课程属性的时候,应该怎样显示该课程所对应的老师的名称?问号里填写什么呢?谢谢!
如下改动:
<td> <s:property value="subName"/> </td>
<td> <s:property value="subType"/> </td>
<td> <s:property value="teachers.loginname"/> </td>
有一个老师表和一个题目表,老师和题目是 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> <s:property value="teachers.teaName"/> </td> 去掉那个关闭session语句就可以,否则不行也试着在<set ... 加lazy=**>还是不行