美化操作数据界面
struts中使用一个值栈将使用struts标签和action中的各种成员变量值保存了起来,
方便ognl表达式在页面使用了struts标签的时候可以直接访问而不需要取值。
VO(value object)传值对象,PO(persistent object)持久化对象,数据库关联对象
- 单选钮
---------struts方式--------------
<s:radio list="{'男','女'}" name="teacher.sex" value="#request.teacher.sex"></s:radio>
--------jstl + el表达式方式-----------
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${teacher.sex == '男'}">
<span class="textspan">男:</span><span class="radiospan"><input class="myradio" type="radio" name="teacher.sex" value="男" checked="checked"></span>
<span class="textspan">女:</span><span class="radiospan"><input class="myradio" type="radio" name="teacher.sex" value="女"></span>
</c:if>
<c:if test="${teacher.sex == '女'}">
<span class="textspan">男:</span><span class="radiospan"><input class="myradio" type="radio" name="teacher.sex" value="男" ></span>
<span class="textspan">女:</span><span class="radiospan"><input class="myradio" type="radio" name="teacher.sex" value="女" checked="checked"></span>
</c:if>
- 下拉列表
<s:select name="clazz.tno" list="#request.teachers" listKey="tno" listValue="tname" value="#request.clazz.tno"/>
name 提交的对应aciton对象的字段 list循环的集合 listkey提交的值 listValue显示的值
Hibernate的关联关系(实体之间的关系)
- 一对一
双向和单向 - 一对多和多对一
主外键 教师一 和 班级多
配置一对多:
1.一的实体类 配置 添加 List<XXX> 集合为成员变量,要给getter setter方法
2.在get方法前配置 targetEntity指向多的一方的类型,fetch为抓取策略,默认为延迟加载lazy 查询自身对象时候,没有访问关联对象就不查询关联对象,EAGER为立即抓取,查询自身对象,没有访问关联对象,也立即 外连接查询关联表,joinColunm填写的字段名是 外键字段
@OneToMan(targetEntity=Clazz.class,fetch=FetchType.EAGER)
@JoinColumn(name="tno")
配置多对一:
1.在多的实体类 添加 一 的 类型对象为成员变量 getter setter
2.在对方对象的get方法前添加 targetEntity 对方的类型 joinColum 对方的字段名 insertable updateable表示在插入和更新的时候 不使用 这个字段配置 不使用关联关系
@ManyToOne(targetEntity= Teacher.class)
@JoinColumn(name = "tno",insertable=false,updatable=false)
完成 详情页 使用循环 便利出 关联的集合,如果还要访问关联集合 对象的 关联集合 多重循环
<ul>
<s:iterator value="#request.teacher.clazzs" var="clazz">
<li>
<span>${clazz.cno}</span>
<span>${clazz.cname}</span>
<span>${clazz.descript}</span>
<ul>
<s:iterator value="#clazz.students" var="student">
<li>
<span>${student.sno}</span>
<span>${student.name}</span>
<span>${student.sex}</span>
<span>${student.avgscore}</span>
<span>${student.area}</span>
</li>
</s:iterator>
</ul>
</li>
</s:iterator>
</ul>
- 多对多
学生和课程多对多(学生表,选课表,课程表)
private List<Course> courses;
@ManyToMany(fetch=FetchType=LAZY)
@JoinTable(name="sc",joinColumns={@JoinColumn(name="sno")},
inverseJoinColumns={@JoinColumn(name="cno")})
//inverse 反向,有控制权的是主,没有控制权的为从
//name是中间表名,joinColumns和中间表提供的外键,本方主键关联的字段名
// inverseJoinColumns 中间表提供的和对方主键关联
public List<Course> getCourses(){}
由于不能直接取中间表的其它字段 往往用于查看关联数据 和去掉重复值的统计
通过一对多 + 多对一 实现 多对多,需要查看和管理中间的表的字段
配置参考一对多 + 多对一

教师班级与学生的详情页.png