最简单的方式,是适合于POJO的需求,通过Annotation的方式来实现。
具体可以参见下面的代码范例:
@ReportClass(
title = "Users",
reportSheets = {
@ReportSheet(
freezed = 1,
index = false,
sheetName = "User",
reportPrimitiveFields = {@ReportPrimitiveField(fieldName="email",width=20),
@ReportPrimitiveField(fieldName="name",width=15,
url="http://localhost:8080/vaalhaai/framework/identityUserAction!open.do?id=${id}"),
@ReportPrimitiveField(fieldName="loginId",width=20),
@ReportPrimitiveField(fieldName="nickName")
}
),
@ReportSheet(
freezed = 2,
index = true,
sheetName = "All",
reportPrimitiveFields = {@ReportPrimitiveField(fieldName="email",width=20),
@ReportPrimitiveField(fieldName="name",width=15),
@ReportPrimitiveField(fieldName="loginId",width=20),
@ReportPrimitiveField(fieldName="nickName",width = 20),
@ReportPrimitiveField(fieldName="password",width = 10)
},
reportEntityCollectionFields = {
@ReportEntityCollectionField(
className="com.vaalhaai.framework.identity.entity.Group",
sheetName="Group",
fieldName="groups")
}
)
}
)
public class User extends BaseEntity {
private static final long serialVersionUID = 83202417663407938L;
/** password */
@Column(name = "PASSWORD")
@Size(min = 6, max = 128)
private String password;
/** login id */
@Column(name = "LOGIN_ID", unique = true)
@Index(name = "FRAMEWORK_IDENTITY_USER_LOGINID", columnNames = "LOGIN_ID")
@Size(min = 5, max = 50)
private String loginId;
/** email */
@Column(name = "EMAIL")
@Email
@Size(max = 50)
private String email;
/** birthday */
@Column(name = "BIRTHDAY")
@Temporal(TemporalType.DATE)
private Date birthday;
/** gender */
@Column(name = "GENDER")
@Size(max = 10)
private String gender;
@Column(name = "NICK_NAME")
@Size(max = 50)
private String nickName;
@Column(name = "CELLPHONE")
@Size(max = 50)
private String cellphone;
@Column(name = "TELEPHONE")
@Size(max = 50)
private String telephone;
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(name = "VAALHAAI_IDENTITY_USER_REF_GROUP", joinColumns = { @JoinColumn(name = "GROUP_ID") }, inverseJoinColumns = { @JoinColumn(name = "USER_ID") })
private Set<Group> groups = new HashSet<Group>();
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getLoginId() {
return loginId;
}
public void setLoginId(String loginId) {
this.loginId = loginId;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
/*
* public void setBirthday(String birthday) throws ParseException {
* this.birthday = DateUtil.parseDate(birthday); }
*/
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
/**
* @return the cellphone
*/
public String getCellphone() {
return cellphone;
}
/**
* @param cellphone
* the cellphone to set
*/
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
/**
* @return the groups
*/
public Set<Group> getGroups() {
return groups;
}
/**
* @param groups
* the groups to set
*/
public void setGroups(Set<Group> groups) {
this.groups = groups;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((loginId == null) ? 0 : loginId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (loginId == null) {
if (other.loginId != null)
return false;
} else if (!loginId.equals(other.loginId))
return false;
return true;
}
}
定义可以在Annotation上面完成。
至于对于标题的中文支持,可以通过国际化的方式来实现。
User = 用户
name = 姓名
loginId = 登录名
password = 密码
email = 邮箱
birthday = 出生日期
gender = 性别
nickName = 别名
cellphone = 手机
telephone = 电话
groups = 群组
#报表
Users = 用户
All = 所有信息
如果你不喜欢用Annotation的方式,那就期待下一个版本吧,会支持使用数据库定制的方式!
分享到:
相关推荐
在深入探讨HID(Human Interface Devices)设备中的报告描述符之前,我们首先简要回顾一下USB描述符的基本概念及其分类。根据《Device Class Definition for Human Interface Devices (HID)》与《HID Usage Tables》...
在Android应用开发中,图表和报表通常用于可视化数据,使用户能够更直观地理解应用程序中的信息。这可能包括进度条、饼图、环形图等不同类型的图表,用于显示时间、进度或其他数值指标。 【压缩包子文件的文件名称...
报表标题是报表的重要组成部分之一,通常用于简要描述报表内容。设置标题可以通过以下方法实现: ```csharp public void setTitle() { this.xrLabelTitle.Text = this._testPlan.Test_name; } ``` 这里通过修改 `...
**ActiveReports** 是一款强大的报表生成工具,适用于多种开发环境,包括但不限于 Windows Forms、ASP.NET 和 WPF 应用程序。它提供了丰富的特性和功能,帮助开发者轻松地创建复杂而美观的报表。 ##### 1.1 ...
- "JavaApk源码说明.txt":这个文件很可能包含了对压缩包内源码的简要说明,包括如何理解、使用以及可能存在的问题和注意事项,是初学者入门的重要指导。 - "下载更多打包源码~.url":这是一个链接,可能指向更多...
在 JIRA 中,核心概念是 Issue(话题),它有很多相关信息,包括话题类型、总结描述、相关项目、相关模块、影响到的版本、话题被解决的版本、发生环境、优先级、指定开发人员、报告人(话题创建者)、当前状态、话题...
在Android开发中,图表报表是展示数据直观且有效的方式,特别是在数据分析、监控或者用户界面设计中。本资源“安卓图表报表相关-CircularButton.zip”似乎包含了一个与圆形按钮相关的项目,名为"CircularButton-...
1. **前言**:前言部分简要介绍了任务协同管理软件的基本概念,它是一个基于SOA架构的应用程序,整合了Windows Presentation、Web服务和SQL数据库功能,主要用于跟踪公司各部门的工作任务。任何人都能创建、查看和...
在Web应用开发中,特别是数据分析和展示领域,ammap因其易用性和灵活性而受到广泛关注。 在描述中提到“可以下了看看参考”,这暗示了ammap具有高度的可学习性和实践价值,开发者可以下载源代码,参考其设计和实现...
【标题】中的“安卓图表报表相关-PercentageCircle自定义圆环效果”指的是一种在Android平台上实现的图形化展示方式,特别适用于展示数据的百分比情况。PercentageCircle是这个特定案例中使用的自定义视图,它创建了...
本文档是一份完整的项目需求文档,旨在描述一个简要的会议OA系统的需求规格说明书。该系统旨在提高公司的日常事务高效进行,并在线记录会议纪要及整个会议中的详细过程。 1. 系统概述 本系统是一个基于Web的会议OA...
现代化的车站售票是集预定车票、售票 、退票、车次查询、报表及其他各种服务,车站售票组织庞大,服务项目多,信息量大,要想提高劳动生产,降低成本,提高服务质量和管理水平,进而促进经济效益,必须借助计算机来...
例如,准备金计算、报表生成、数据存储和检索、异常处理等,每个功能都应清晰、具体,以便开发人员准确理解。 4. **非功能需求**:这部分涵盖了系统的性能、可靠性、安全性和可维护性等非功能性特性。例如,系统...
FastReport是Delphi开发环境中常用的报表生成工具,它支持多种数据库连接,包括SQL SERVER,并提供了强大的报表设计功能。在Delphi中,FastReport的报表设计通常通过设计单元(如Unit1.ddp、Unit1.dfm)和源代码文件...
PowerDesigner是一款由Sybase公司开发的企业级数据建模工具,广泛应用于数据库设计、数据分析和数据仓库建模等领域。在本教程中,你将深入学习到如何利用PowerDesigner进行概念数据模型(CDM)、逻辑数据模型(LDM)...
以上只是部分控件的简要介绍,更多详细的使用方法和技术细节,请参考《BOS开发指南_控件》文档。这些控件的灵活应用不仅能够提升应用程序的用户体验,还能够极大地提高开发效率。希望本篇内容能为正在学习和使用金蝶...