在前面一步一步做项目(11)扩展(管理课程信息)的基础上进行,前面的文章详细介绍了如何添加新功能,这里就不再赘述。
现在,假设你已经按照前面的方法,添加了Examinee、Discipline、CountyDistrict的信息处理,也就是关于这三个实体的增删改查操作。
类图
可以按照下图属性来添加这三个类,也可以少一些属性,没有太大关系,但要注意保持这三个类之间的关系,如图所示:
从这里可以看出,在实体类Examinee中有Discipline和CountyDistrict属性,在配置时就要指明这种关系。
实体类配置
要在实体类映射中标识出上图所示的关系,需要在Examinee.hbm.xml配置文件中添加如下代码:
<many-to-one name="discipline" class="cn.lut.curiezhang.model.Discipline" fetch="select" cascade="none" lazy="false">
<column name="DISCIPLINE_ID" length="32">
<comment>科类</comment>
</column>
</many-to-one>
<many-to-one name="countyDistrict" class="cn.lut.curiezhang.model.CountyDistrict" fetch="select" cascade="none" lazy="false">
<column name="COUNTY_DISTRICT_ID" length="32">
<comment>县区代码</comment>
</column>
</many-to-one>
这样Examinee就有指向Discipline和CountyDistrict的关系了,就可以在数据库中创建对应的列(属性)来存放相关的信息。
处理用户输入
在添加考生信息时,用户在输入Discipline时,应该提供一个下拉列表框供用户选择,其代码如下:
<!-- discipline -->
<div class="form-group">
<label class="col-sm-6 control-label" for="discipline">
<s:text name="Examinee.fieldName.discipline"/> <i class="fa fa-arrow-circle-right text-danger"></i>
</label>
<div class="col-sm-6">
<s:select id="discipline" name="discipline.disciplineId"
list="disciplineList" listKey="disciplineId" listValue="disciplineName"
placeholder="%{getText('Examinee.fieldPrompt.discipline')}"
cssClass="selectpicker show-tick" data-width="100%" data-container="body"/>
</div>
<div class="col-sm-6">
<s:fielderror fieldName="discipline" />
</div>
</div>
<!-- /discipline -->
下拉列表框中将从Discipline中查找数据,并列出来,因此,为了能够列出数据,还需要在ExamineeAction中添加相应的处理代码,以便完成检索,其代码如下:
/**
* 搜索所有科类数据时的返回结果
*/
private Collection<Discipline> disciplineList;
public Collection<Discipline> getDisciplineList() {
log.debug("CEAMSEMS:Action层 > 得到所有数据,disciplinelist");
disciplineList = disciplineService.getAll();
return disciplineList;
}
/**
* Struts和Spring整合过程中按名称自动注入的业务层的类
*/
private DisciplineService disciplineService;
public void setDisciplineService(DisciplineService disciplineService) {
log.debug("CEAMSEMS:Action层 > 注入disciplineService类");
this.disciplineService = disciplineService;
}
这里的disciplineList就是jsp中用到的数据,在这里注入了DisciplineService,同样需要在applicationContext.xml中进行配置,配置代码如下:
<bean id="examineeAction" class="cn.lut.curiezhang.action.ExamineeAction" scope="prototype">
<!-- 手动注入Service -->
<property name="examineeService" ref="examineeService"/>
<property name="disciplineService" ref="disciplineService"/>
</bean>
系统添加的科目信息就可以在添加Examinee时进行选择了,科目列表如下:
现在,要添加考生信息,就会在科类中列出上面添加的所有的科类信息了,如图所示:
对应的browse.jsp、modify.jsp、index.jsp也需要修改,这里就不再赘述,供读者自己练习。
类似地,要处理CountyDistrict相关的信息,同样的方式操作即可。这里不再赘述,供读者自己练习。