使用手册实体类,省略了getter/setter
@Entity
@Table(name="manual")
public class Manual {
@Id
@GeneratedValue
private Long id;
/**
* 文件名称
*/
@Column(name="filename")
private String fileName;
/**
* 应用类型
*/
@JsonIgnore
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="applicationid")
private Application application;
使用手册实体Bean
public class ManualListBean {
private final Manual manual;
public ManualListBean(Manual manual){
this.manual = manual;
}
@JsonView(DataTablesOutput.View.class)
public Long getId(){
return manual.getId();
}
@JsonView(DataTablesOutput.View.class)
public String getFileName(){
return manual.getFileName();
}
@JsonView(DataTablesOutput.View.class)
public String getApplicationName(){
Application application = manual.getApplication();
if(application != null){
return application.getName();
}
return "";
}
}
应用类型实体类,省略了getter/setter
@Entity
@Table(name = "applicationtype")
public class ApplicationType implements java.io.Serializable{
private static final long serialVersionUID = 899339761892494451L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;//应用名称
@JsonIgnore
@OneToMany(fetch=FetchType.LAZY, mappedBy="applicationType",cascade=CascadeType.ALL)
private Set<InstructionManual> instructionManualSet = new HashSet<>();
Bean
public class ApplicationListBean extends DataTableBean<Application>{
@JsonView(DataTablesOutput.View.class)
public Long getId() {
return target.getId();
}
@JsonView(DataTablesOutput.View.class)
public String getName() {
return target.getName();
}
}
ManualController
@JsonView(DataTablesOutput.View.class)
@RequestMapping(value="/manualList.json",method=RequestMethod.POST)
@ResponseBody
public DataTablesOutput<ManualListBean> manualList(@Valid DataTablesInput input, HttpServletRequest request){
Test test = (Test) request.getSession().getAttribute("test");
List<Application> applications = applicationService.findByApplication(test);
final Set<Application> applicationSet = new HashSet<>(applications);
final String name = ".xxx";
Specification<Manual> additionalSpecification = new Specification<Manual>() {
@Override
public Predicate toPredicate(Root<Manual> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
if(applicationSet.size()>0){
List<Predicate> predicateList = new ArrayList<>();
Iterator<Application> iterator = applicationSet.iterator();
while(iterator.hasNext()){
Application application = iterator.next();
Predicate p1 = cb.equal(root.<Application>get("application"), application);
predicateList.add(p1);
}
Predicate[] pre = new Predicate[predicateList.size()];
query.where(predicateList.toArray(pre));
}else{
Predicate p1 = cb.equal(root.<String>get("filename"), name);
query.where(p1);
}
return query.getRestriction();
}
};
DataTablesOutput<Manual> manualOutput = this.manualService.findAll(input, additionalSpecification);
DataTablesOutput<ManualListBean> output = new DataTablesOutput<>();
output.setDraw(manualOutput.getDraw());
output.setError(manualOutput.getError());
output.setRecordsFiltered(manualOutput.getRecordsFiltered());
output.setRecordsTotal(manualOutput.getRecordsTotal());
List<ManualListBean> listData = new ArrayList<>();
for (Manual manual : manualOutput.getData()) {
ManualListBean manualListBean = new ManualListBean(manual);
listData.add(manualListBean);
}
output.setData(listData);
return output;
}
前端
$(function() {
$('#form').DataTable({
serverSide : true,
destroy : true,
ajax : {
url : ctx + '/manual/manualList.json',
type : "post"
},
columns : [
{"data" : "id"},
{"data" : "fileName"},
{"data" : "application.name"},
{"data" : "id"}
],
columnDefs : [{
width : '11%',
render : function(data, type, row) {
return data;
},
targets: [0,1]
},
{
width: '20%',
render: function (data, type, row) {
return row.applicationName;
},
targets: [2]
},
{
width : '20%',
render : function(data, type, row) {
if (data) {var html = '<ul class="icons-list"><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">'
+ '<i class="icon-menu9"></i></a>'
+ '<ul class="dropdown-menu dropdown-menu-right">'
+ '<li><a href="'+ ctx + '/manual/update/'+ data+ '"><i class="icon-diff-modified"></i>操作</a></li>'
+ '</ul></li></ul>';
return html;
} else {
return '';
};
},
targets : 3,
}]
});
});
参考:http://www.knowsky.com/988841.html