具体业务逻辑 把相关service注入到action中 在action中写。
如果把相关dao注入到service中则 方法名注意使用save get update等开头在配置文件配置的开头的字段。
********************
****************关联表的知识点 ************************
//主外键关联表 :
//☆☆☆次表对应的实体类
//*数据库表上不建立外键关联,只建立外键对应字段 ,在实体类上加外键对应关系
private Member member;//外键字段对应的主表类 ,,,,在实体类中不再出现数据库对应的外键字段
@ManyToOne(fetch = FetchType.LAZY)
//name="memberid" 本表中引用主表的外键字段 已做好对应的,在实体类中不再出现该外键字段 ftl页面显示: 实体类.外键字段对应主表类.属性
@JoinColumn(name = "memberid",nullable = false)
public Member getMember() {
return member;
}
public void setMember(Member member) {
this.member = member;
}
-----------------------
☆☆☆主表对应实体类 :
//外键字段对应实体类里面添加
private Set<Memberextend> memberextendSet;//开放下载
//mappedBy="member" 引用本(主)表 的次表 外键 对应的属性 [主表bean定义的变量]
@OneToMany(fetch = FetchType.LAZY, mappedBy = "member")
@Cascade(value = { CascadeType.DELETE })
@OrderBy("createDate desc")
public Set<Memberextend> getMemberextendSet() {
return memberextendSet;
}
public void setMemberextendSet(Set<Memberextend> memberextendSet) {
this.memberextendSet = memberextendSet;
}
主表实体类Action 关联次表(引用表)
//主表关联次表查询 ,【同时主表查询条件和次表的查询条件】只查询主表实体类集合 。
//设置次表对应类属性的别名 【主表 inner join 次表 】默认内连接
detachedCriteria.createAlias("memberextendSet", "m");
//次表的查询条件匹配 :别名.属性名 列举次表的组合条件
detachedCriteria.add(Restrictions.in("m.buyautho", flags));
主表list.ftl 列表页面 要显示次表中关联的数据 【主表1:N次表 关系,如:班级列表list 某一列显示含有的学生的姓名 】则 需要在主表bean类中加入以下代码:
加入一个接受次表集合的list属性<转换set集合> 。
private List<Memberextend> mymemberextendSet;
@Transient//不进行序列化,该字段在数据库中无需有对应的字段
public List<Memberextend> getMymemberextendSet() {
//此处把set集合转为list供页面显示用。
List<Memberextend> list = new ArrayList<Memberextend>(memberextendSet);
return list;
}
public void setMymemberextendSet(List<Memberextend> mymemberextendSet) {
this.mymemberextendSet = mymemberextendSet;
}
***************************************
String[] bzstleixing = stleixing.split(", "); //查询条件多选框中 split(",")分割 如果查询不对 例如是数字字符串, 尝试额外加一个空格 split(", ")
action 中 update方法 BeanUtil属性值的copy
//页面上更改字段数量少的时候直接set/get方法 赋值
//如果更改的字段数量多则用BeanUtils.copyProperties 方法。
BeanUtils.copyProperties(Form表单bean,persistent,new String[]{"忽略的字段1","不copy值的字段2","id", "createDate", "modifyDate",});
qiyezaiyongbiaozhunService.update(persistent);
*************************************
bzzc获取当前的登录用户
this.getSession("SPRING_SECURITY_LAST_USERNAME").toString();//获得当前登录管理员的登录名
this.getSession("SPRING_SECURITY_LAST_USERNAME").toString().toLowerCase();//获得当前登录管理员的登录名
Admin admin = adminService.get("username", loginUsername); //获取登录的实体
member获取当前登录用户
getLoginMember();//获取当前登录用户
******************************************************
member /bzzc/ searchindex //获取ip的信息 ip地址 项目中
String ip = com.sdjinzhi.util.StringUtils.getIpAddr();
*******************************************
rgb 颜色值
http://www.114la.com/other/rgb.htm
*********************************************
列表中 是/否 显示 √对号 x 错号
<span class="trueIcon"> </span>
<span class="falseIcon"> </span>
<img src="${base}/style/admin/images/list_true_icon.gif" />
<img src="${base}/style/admin/images/list_false_icon.gif" />
Restrictions.eq("qyisopen", false) //判断字段的true /false
***************************************************
bzzc 定时任务类:<在接口定义 在以下类中实现 :>
AutoTaskSchedulerSQLImpl
***********************************************************
pojo 中使用 int 的包装类 Integer Boolean 等
********************************************************
ArithUtil //运算工具类
SerialNumberUtil.buildOrderSn();//订单编号生成工具
*********************************************************
Action 中:
Map<String, String> jsonMap = new HashMap<String, String>();
jsonMap.put(STATUS, SUCCESS);
jsonMap.put(MESSAGE, "删除成功!");
return ajaxJson(jsonMap);
@Validations(
requiredStrings = {
@RequiredStringValidator(fieldName = "id", message = "ID不允许为空!")
}
)
@InputConfig(resultName = "error")
*********************************************************************
日期格式化:
DateUtil.java 工具类
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String shenhedate = df.format(new Date());
当前时间 :
String nowdates=DateUtil.getDateTimeStr();
*********************************************************************
pojo :
private Boolean qyisopen;// 全文阅览开关
对sqlserver应数据库字段 // bit (0,1)
程序中false -->数据库bit == 0
*************************************************************************
pojo
@Transient //注释,加载时hibernate不会进行加载 【数据库无需有对应的字段值】
private String a825name;
******************************************
String str = "中国";
System.out.println("用escapeJava方法转义之后的字符串为:"+StringEscapeUtils.escapeJava(str)); //打印字符串为:/u4E2D/u56FD/u5171/u4EA7/u515A
上述结果翻转成中文:
StringEscapeUtils.unescapeHtml(StringEscapeUtils.escapeHtml(str))); //打印结果:中国
******************************************
表名/实体类: NavigationPosition
Action名: NavigationPositionAction
页面名:navigation_position_chakan.ftl
${base}/ 当前项目名根目录
${basepath}
******************************************************************************
弹出层
tipsWindown :用法及介绍
<script type="text/javascript" src="${base}/style/admin/js/tipsWindown.js"></script>
/*参数:[可选参数在调用时可写可不写,其他为必写]
----------------------------------------------------------------------------
title: 窗口标题
content: 内容(可选内容为){ text | id | img | url | iframe }
width: 内容宽度
height: 内容高度
drag: 是否可以拖动(ture为是,false为否) 【true为可以拖拽 false为不允许移动】
time: 自动关闭等待的时间,为空(“”)则不自动关闭 。 3000表示 3秒
showbg: [可选参数]设置是否显示遮罩层(0为不显示,1为显示) 【true为显示遮罩层】
cssName: [可选参数]附加class名称 leotheme
------------------------------------------------------------------------*/
tipsWindown("例子","text:例子","500","400","true","3000","0","exa")
http://blog.csdn.net/shellwin/article/details/5778578
http://www.cool80.com/Demonstrate/339/
http://blog.csdn.net/tianhandigeng1498/article/details/6048927
<a href="javascript:void(0)" οnclick="xy()" > </a>
<a href="javascript:;" οnclick="xy()" > </a>
项目中配置@@@
导入css:
<link href="${base}/style/admin/css/webox.css" rel="stylesheet" type="text/css" /> 背景图 ${base}/style/admin/images/bg.png
导入js:
<script type="text/javascript" src="${base}/style/admin/js/tipsWindown.js"></script>
定义方法使用:
<script language="javascript" type="text/javascript">
function xy(){
tipsWindown("套餐协议","url:get?${base}/member/agreement!qlist.action","800","400","true","","true","leotheme");
}
</script>
tipsWindown("标题","id:showType","350","150","true","","true","id") //id:showType为 : <div id="showType" style="display:none;">我是弹出层内容!</div>
function memberRankEdit(a,b){
tipsWindown("网员标准等级修改","iframe:member_rank!edit.action?id="+a+"&flagMessage="+b,"610","415","true","","true","leotheme");
}
********************************************************************
页面校验提醒
$.message("请输入您的验证码!");
导入css样式:
base.css
*******************************************************************
Action中提示信息:
addActionError("验证码错误,请重新输入!");
return "login";
***********************************************************************
return ajaxJsonErrorMessage("验证码输入错误!");
return ajaxJsonSuccessMessage("删除成功!!");
$().ready( function() {
$.ajax({
url: "/member/standard/standard!ajaxAdd.action",
data: {"id": id, "type":type,"iscongfu" :iscongfu,"iscopr" :iscopr },
type: "POST",
dataType: "json",
cache: false,
success: function(data) {
if (data.status == "success") {
$.dialog({id:"dig" ,type: "success", content: "<span class=\"red\">" + data.message + "</span> <br/> <a href=\"javascript:$.clo();\">[ 继续购买其他标准 ]</a> <a href=\"${base}/standard/standard!list.action\">[ 去结账 ]</a> ", width: 400, modal: true ,autoCloseTime: 20000});
}
});
}
$.dialog
$.dialog = function (settings){}
$.dialog({type: "warn", content: "请输入验证码!", modal: true, autoCloseTime: 3000});
$.closeDialog = function (dialogId) {}
$.message = function (settings) {}
if ($.trim($registerWindowMemberUsername.val()) == "") {
$registerWindowMemberUsername.focus();
$.message({type: "warn", content: "请输入用户名!"});
return false;
}
$.trim()
commentCaptchaImageRefresh(); //刷新验证码
$.ajax({
url: shopxx.base + "/shop/member!ajaxLogin.action",
data: $loginWindowForm.serialize(),
type: "POST",
dataType: "json",
cache: false,
beforeSend: function() {
$loginWindowForm.find("button").attr("disabled", true);
},
success: function(data) {
if (data.status == "success") {
$.flushHeaderInfo();
$.closeDialog("loginWindow");
}
$.message({type: data.status, content: data.message});
if(redirectUrl != null) {
location.href = redirectUrl;
}
},
complete: function() {
$loginWindowForm.find("button").attr("disabled", false);
$loginWindowCaptcha.val("");
loginWindowCaptchaImageRefresh();
}
});
****************************************
StringEscapeUtils """"""""""""""""" StringEscapeUtils.escapeHtml dealManagerDispatcher
//捕捉异常信息
catch(Exception e){
e.printStackTrace();
return ERROR;
}
****************************
地址跳转
redirectionUrl="/demo/article!list.action?type=0";
return SUCCESS;
redirectionUrl="/lw/demo/article!list.action?type=0";
return SUCCESS;
redirectionUrl="navigation_position!list.action?type=0";
return SUCCESS;
*********************************
request.getRequestURI() /jqueryWeb/resources/request.jsp
request.getRequestURL() http://localhost:8080/jqueryWeb/resources/request.jsp
request.getContextPath()/jqueryWeb
request.getServletPath()/resources/request.jsp
注: resources为WebContext下的目录名
jqueryWeb 为工程名
****************************************************************
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="member_id")
public Member getMember() {
return member;
}
外键引用会员表
pojo /set/get方法注解 对应本表的member_id字段
this.stdManagerApplyService.get("member", member);// 属性名 是实体类字段 : 属性值为 pojo
ftl页面 :${apply.member.username}
****************************************************************
方式一:@Temporal(TemporalType.DATE)映射为日期 // birthday date (只有日期)
方式二:@Temporal(TemporalType.TIME)映射为日期 // birthday time (是有时间)
方式三:@Temporal(TemporalType.TIMESTAMP)映射为日期 //birthday datetime (日期+时间)【默认】
@Temporal(TemporalType.DATE)
private Date birthday;
如果在某类中有Date类型的属性,数据库中存储可能是'yyyy-MM-dd hh:MM:ss'要在查询时获得年月日,
在该属性上标注@Temporal(TemporalType.DATE) 会得到形如'yyyy-MM-dd' 格式的日期。
ftl页面:${apply.createDate?string("yyyy-MM-dd HH:mm:ss")}
***************************************************************
enum 枚举使用方法:
pojo ---> 定义enum对象
/**申请状态 处理中 审核通过 审核失败 */
public enum ApplyManagState{
processing ,pass , faild
};
private ApplyManagState ams; //状态
//如果枚举字段上不加注解,那么枚举字段就会被默认映射为 int 类型存储。
//如果不加EnumType.STRING 则存入数据库的值为 0、1、2 【存枚举值对应的下标 0、1、2】
/** 保存整数到数据库 */ @Enumerated(EnumType.ORDINAL)
@Enumerated(EnumType.STRING) /** 保存字符串到数据库 */
public ApplyManagState getAms() {
return ams;
}
用法:
User u =new User();
u.setAms(ApplyManagState.processing);
"审核失败".equals(getAms().toString()) //比较之前先把枚举转换成字符串类型
项目中配置@@@ i18n_zh_CN.properties 全局国际化 中配置 enum 的key 和对应value 如: ApplyManagState.faild // 审核失败
ftl页面: ${action.getText("ApplyManagState." + apply.applyManagState)} 获取全局国际化属性的值
********************************************************************