项目笔记0001







具体业务逻辑  把相关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">&nbsp;</span>
<span class="falseIcon">&nbsp;</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> &nbsp;&nbsp;&nbsp; <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)} 获取全局国际化属性的值
 
********************************************************************
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

prefectjava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值