JAVA新手知識點(個人向)
- stat的值
- 所有的id以choose開頭的複選框的選中狀態和allChoose的一樣
- ajax傳遞數據時設置this可用
- 批量刪除與批量添加
- 下拉列表框
- mybities傳多個參數的問題
- jquary的顯示和隱藏
- 零碎的知識點
- 上下移動
- 圖片上傳
- 分頁 查詢
- ip地址的獲取
- 數據庫創建規範與是spring
- 配置事務管理器和事務的註解驅動
- mysql查詢最大值最小值分組
- ajax請求json和處理json:json
- 在線編輯器設置
- 正則 驗證
- 縮略 截取顯示
- jsp頁面jstl標籤中的時間比較
- json返回時間格式化
- java裏面的時間比較
- 數據庫mysql中的時間相加減的問題和比較
- 循環嵌套數據重複問題
- lucene
- table顯示格式
- ajax修改排序
- 在新窗口中打開一個超鏈接
- 配置歡迎頁面
stat的值
循環時stat的屬性
current:當前這次迭代的(集合中的)項。
index:當前這次迭代從0開始的迭代索引。
count:當前這次迭代從1開始的迭代計數。
first:用來表明當前這輪迭代是否爲第一次迭代,該屬性爲boolean類型。
last:用來表明當前這輪迭代是否爲最後一次迭代,該屬性爲boolean類型。
begin:begin屬性的值。
end:end屬性的值
所有的id以choose開頭的複選框的選中狀態和allChoose的一樣
//id以chose開頭的選擇
$("input[id^='choose']").prop("checked", $(this).prop("checked"));
**^='**'
//判斷checkbox?是否選中??
$("#id").is(":checked");//選中,返回true,沒選中,返回false??
//設置checkbox爲選中狀態??
$("#id").prop("checked",true);??
//設置checkbox爲不選中狀態?
$("#id").prop("checked",false);
//判斷哪個多選框別選中的jsp代碼:
<input type="radio" id="radioId" name="radioname" value="A" checked="checked"/>apple
<input type="radio" id="radioId" name="radioname" value="A" checked="checked"/>orange
<input type="radio" id="radioId" name="radioname" value="A" checked="checked"/>pear
jQuery:
alert("value="+$("input[name='radioname']:checked").val());
ajax傳遞數據時設置this可用
$.ajax({
url : path + "/manage/questionType/delete",
data : {id : id},
success : function() {
$(this).parent().parent().remove();
//$("#tr"+id).remove();
}.bind(this)
});
批量刪除與批量添加
刪除
//全選框的設定
$("#allchose").click(function(){
//給全選框加點擊事件,點擊選擇當前頁面所有單選框
if($(this).is(":checked")){
$("[id=choose${param.pageno}]").attr("checked",true);
}
else{
$("[id=choose${param.pageno}]").attr("checked",false);
}
})
//給當前頁面的單選框加點擊事件,如果點擊則遍歷查找是否都選中
$("[id=choose${param.pageno}]").click(function(){
alert(1);
var a=false;
$("[id=choose${param.pageno}]").each(function(){
if(!$(this).is(":checked")){
a=true;
}
})
//如果沒有都選中則去掉全選框,如果都選中則加上全選框
if(a==false){
$("#allchose").attr("checked",true)
}
else{
$("#allchose").attr("checked",false)
}
})
})
//將數據傳給controller
$("#deleteallarticles").click(function(){
var a="";
//獲得所有選中的數字的id
$(":checked[id^='choose']").each(function(){
var m=$(this).next().html();
a+=m+',';
})
//移除<tr>
$(":checked[id^='choose']").each(function(){
$(this).parent().parent().remove();
})
if(a.length>1){
//去掉最後一個,
a = a.substring(0, a.length - 1);
$.ajax({
url:"manage/deletesomearticle",
type:"post",
data:{ids:a},
success:function(mes){
}
})
}
else{
alert("不能不選擇")
}
})
//controller裏面
@RequestMapping("manage/deletesomearticle")
@ResponseBody
public void deletesomearticle(String ids){
String[] array = ids.split(",");
List<Integer> listid = new ArrayList<Integer>();
for(String temp:array){
listid.add(Integer.parseInt(temp));
}
//批量刪除
as.deletesomearticle(listid);
}
//mybities裏面
<update id="deletesomearticle" >
update article set article.`enable`=false where id in
<foreach collection="list" open="(" close=")"
item="id" separator=",">
#{id}
</foreach>
</update>
添加
//jsp裏面
//添加標題
<input type="text" id="title">
<br>
//添加內容
<input type="text" id="info">
<br>
//置頂要通知的員工
<br>
<c:forEach items="${allEmp }" var="allEmp" varStatus="stat">
<input type="checkbox" id="someemp" value="${allEmp.id }">${allEmp.name }
</c:forEach>
<br>
<input type="button" value="確定添加" id="sure">
$("#sure").click(function(){
var aa="";
var cc=0;
$(":checked[id='someemp']").each(function(){
var m=$(this).val();
aa+=m+',';
cc=cc+1;
})
$(":checked[id='choose']").each(function(){
$(this).parent().parent().remove();
})
var title=$("#title").val();
var info=$("#info").val();
var empCount=cc;
var zz = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]{1,25}$/;
var zz1 = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]{1,1500}$/;
var flag1=zz.test(title);
var flag2=zz1.test(info);
if(flag1==true&&flag2==true){
$.ajax({
url:"<%=path%>/insertNotice",
type:"post",
data:{title:title,info:info,empCount:empCount,listid:aa},
success:function(mes){
}
})
}
else{
alert("不能爲空")
}
})
// controller裏面
@RequestMapping("insertNotice")
@ResponseBody
public void getInsertNotice(Notice notice,String listid){
//添加一個表
ns.insert(notice);
//查找剛剛插入語句的id
Integer a=ns.findnewNotice();
//批量添加
String[] array = listid.split(",");
List<Integer> listemp = new ArrayList<Integer>();
for(String temp:array){
listemp.add(Integer.parseInt(temp));
}
ns.Insertsome(a, listemp);
}
}
// dao裏面
//添加新的notice
void insert(Notice notice);
//查找新加入的notice的id
Integer findnewNotice();
//批量添加
void Insertsome(@Param("noticeid")Integer noticeid,@Param("listempid")List<Integer> listemp);
// mybities裏面
<insert id="insert" parameterType="vo.Notice">
insert into notice(title,info,empCount) values(#{title},#{info},#{empCount})
</insert>
<select id="findnewNotice" resultType="Integer">
select max(id) from notice ;
</select>
<insert id="Insertsome">
insert into notice_emp(noticeId,empId) values
<foreach collection="listempid" open="" close="" item="id" separator=",">
(#{noticeid},#{id})
</foreach>
</insert>
下拉列表框
//跳轉頁面後設置默認選中
//默認複選框選中
$(document).ready(function(){
var defaultId = "${param.menuid}";
$("select option").each(function(){
if($(this).val()==defaultId){
$(this).attr("selected","selected");
}
});
});
//默認單選框選中
<script type="text/javascript">
$(document).ready(function(){
$("input[value=${sessionScope.userinfo.sex}]").prop("checked",true);
});
</script>
//獲得下拉列表框的值
//兩種方法獲取select下拉框選中的option的值
//第一種
<select name="type" id="aaa" onchange="show_sub()">
<option value="0">請選擇主菜名</option>
<option value="1">白菜</option>
<option value="2">蘿蔔</option>
</select>
function show_sub(){
alert($("#aaa").find("option:selected").attr("value"));//原生
alert($("#aaa").find("option:selected").val()); //加入jq庫
}
//第二種
<select name="type" onchange="show_sub(this.options[this.options.selectedIndex].value)">
<option value="0">請選擇主菜名</option>
<option value="1">白菜</option>
<option value="2">蘿蔔</option>
</select>
<script>
function show_sub(v){
alert(v);
}
</script>
mybities傳多個參數的問題
一、基於註解
public List<XXXBean> getXXXBeanList(@Param("id")String id, @Param("code")String code);
<select id="getXXXBeanList" resultType="XXBean">
select t.* from tableName where id = #{id} and name = #{code}
</select>
由於是多參數那麼就不能使用parameterType, 這裏用@Param來指定哪一個
二、Map封裝多參數:
public List<XXXBean> getXXXBeanList(HashMap map);
<select id="getXXXBeanList" parameterType="hashmap" resultType="XXBean">
select 字段... from XXX where id=#{xxId} code = #{xxCode}
</select>
其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那個就在#{}使用那個,map如何封裝就不用了我說了吧。
三、List封裝in:
public List<XXXBean> getXXXBeanList(List<String> list);
<select id="getXXXBeanList" resultType="XXBean">
select 字段... from XXX where id in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
foreach 最後的效果是select 字段... from XXX where id in ('1','2','3','4')
jquary的顯示和隱藏
jQuery的hide() 和 show()
通過 jQuery,您可以使用 hide() 和 show() 方法來隱藏和顯示 HTML 元素:
$("#hide").click(function(){
$("p").hide();
});
$("#show").click(function(){
$("p").show();
});
零碎的知識點
@RequestMapping()中的mothod默認是post和get方法都可以,通過前端自適應
//將某個數據打印到工具臺上
console.log(form);
//jquary中string和int的轉化
Jquary自帶parseInt方法,可以點出來
//resource和Autowired
@resource 和 @Autowired 兩者
都可以做bean 注入。兩者都可以在setter方法和字段上使用不同:resource按照類型裝配對象,默認要求依賴對象必須存在如果可以爲null需要required爲falses在xml裏面用《scope》test<scoper>可以限制編譯
//阻止a鏈接的跳轉行爲
e.preventDefault();
//兩個路徑請求一個controller
@webservlet({"/servlet/text"},"/adv")
//html的日曆標籤
<span>日期:</span><input style="height:30px" type="date" name="date"/>
上下移動
//修改排序
//jsp裏面
//上移
$("[id='articleup']").bind("click",function(){
var $this = $(this);
var id1=$this.next().html();
var curTr = $this.parents("tr");
var prevTr = $this.parents("tr").prev();
var id2=prevTr.find("[id=articleup]").next().html();
if(prevTr.length == 0){
alert("已經是第一行了");
return;
}else{
prevTr.before(curTr);//before是將div和上一個div互換位置
$.ajax({
url:"manage/articleupanddown",
type:"post",
data:{id1:id1,id2:id2},
success:function(mens){
}
})
}
});
//下移
$("[id='articledown']").bind("click",function(){
var $this = $(this);
var curTr = $this.parents("tr");
var nextTr = $this.parents("tr").next();
var id1=$this.next().html();
var id2=nextTr.find("[id=articledown]").next().html();
if(nextTr.length == 0){
alert("已經是最後一行了");
return;
}else{
nextTr.after(curTr);//after是將div和下一個div互換位置
$.ajax({
url:"manage/articleupanddown",
type:"post",
data:{id1:id1,id2:id2},
success:function(mens){
}
})
}
});
//controller裏面
@RequestMapping("manage/articleupanddown")
@ResponseBody
public void getarticleupanddown(Integer id1,Integer id2){
//文章上移
//獲取第一個id的屬性
//獲取第二個id的屬性
Article a1= as.selectById(id1);
Article a2= as.selectById(id2);
Article a3=new Article();
a3.setId(a1.getId());
a3.setSort(a2.getSort());
Article a4=new Article();
a4.setId(a2.getId());
a4.setSort(a1.getSort());
//更改兩者的屬性
as.updateById(a3);
as.updateById(a4);
}
圖片上傳
//在spring-mvc設置
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="-1"></property>
<property name="resolveLazily" value="true"></property>
</bean>
//jsp代碼
<p class="error-text" ><i class="icon-picture"></i>【鏈接圖片】 <input type="text" id="pho"></p>
<form id="test">
選擇文件:<input data-role="none" type="file" name="file" width="120px">
<input type="button" onclick="testUpload();" value="上傳圖片"> </form>
<img id="onepho" alt="" src="">
<script type="text/javascript">
function testUpload(){
var form = new FormData(document.getElementById("test"));
var url ="uploadimages";
$.ajax({
url : url,
data : form,
type : "post",
processData:false,
contentType:false,
success : function(mes){
if(mes==1){
alert("圖片重名")
}
if(mes==2){
alert("請選擇圖片")
}
else{
alert(mes);
$("#onepho").attr("src","<%=path %>/images/"+mes);
$("#onepho").attr("style","width:100px;height:60px;");
$("#pho").attr("value",mes);
}
}
});
}
</script>
//controller裏面
@RequestMapping("uploadimages")
@ResponseBody
public void getuploadimages(MultipartFile file,HttpServletRequest request,HttpServletResponse response){
//圖片名稱
String path = request.getSession().getServletContext().getRealPath("/images");
//圖片名稱
String fileName = file.getOriginalFilename();
System.out.println(file.getContentType());
PrintWriter writer = null;
try {
writer = response.getWriter();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(fileName!=null){
//利用UUID或得隨機文件名
String filenames=UUID.randomUUID().toString();
//獲得存取的名稱
String a=filenames+fileName;
//圖片存取路徑
File dir = new File(path, a);
//查看是否存在這個文件夾,不存在,則創建這個文件夾
if(!dir.exists()){
dir.mkdirs();
}
// 轉存文件
try {
file.transferTo(dir);
writer.print(a);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
writer.print(1);
} catch (IOException e) {
// TODO Auto-generated catch block
writer.print(1);
}
}
else{
writer.print(2);
}
}
分頁 查詢
controller裏面:
ModelAndView mv=new ModelAndView();
//分頁讀取友情鏈接表內容
//分頁查詢
Pager pager=new Pager();
//查詢每一頁顯示的數量
Config config=cfs.finpagesize();
pager.setPagersize(Integer.parseInt(config.getValue()));
//查找總的數量
Integer count=ls.findallcount();//總數量
//總頁面數量
int pagercount=(count-1)/pager.getPagersize()+1;
pager.setPagercount(pagercount);
int pagerblur=1;
if(pagerno==null){
pagerno=1;
}
try {
pagerblur=pageno;
}
catch (Exception e) {
// TODO: handle exception
}
pager.setPagerblur(pagerblur);
int str=(pager.getPagerblur()-1)*pager.getPagersize();
pager.setPagetstart(str);
List<Links> a=ls.listlink(pager);
mv.addObject("pagerno", pager);
mv.addObject("listlinks", a);
mv.setViewName("manage/managelinks");
return mv;
jsp裏面:
<c:forEach items="${requestScope.listlinks}" var="listlinks" varStatus="stat">
<tr>
<td>${listlinks.title }</td>
<td>${listlinks.url }</td>
<td>${listlinks.inputTime }</td>
<td><a href="#myModal" role="button" data-toggle="modal"><i class="icon-search"></i></a><span style="display: none">${listlinks.id }</span></td>
<td><a href="javaScript:void(0)"><i class="icon-circle-arrow-up"></i></a><span style="display: none">${listlinks.id }</span></td>
<td><a href="javaScript:void(0)"><i class="icon-circle-arrow-down"></i></a><span style="display: none">${listlinks.id }</span></td>
<td><a href="javaScript:void(0)" id="deleteonearticle"><i class="icon-trash"></i></a><span style="display: none">${listlinks.id }</span></td>
</tr>
</c:forEach>
<div class="pagination">
<ul>
<li><a href="manage/manageadposition?pageno=1">首頁</a></li>
<li><a href="manage/manageadposition?pageno=${pagerno.pagerblur-1}">前一頁</a></li>
<c:forEach begin="${pagerno.pagerblur}" end="${pagerno.pagerblur+2>pagerno.pagercount?pagerno.pagercount:pagerno.pagerblur+2}" var="i">
<c:if test="${pagerno.pagerblur eq i}" var="isEq">
<li><span style="color: red">[${i}]</span></li>
</c:if>
<c:if test="${not isEq }">
<li><a href="manage/manageadposition?pageno=${i}">[${i}]</a></li>
</c:if>
</c:forEach>
<li><a href="manage/manageadposition?pageno=${pagerno.pagerblur+1}">下一頁</a></li>
<li><a href="manage/manageadposition?pageno=${pagerno.pagercount}">尾頁</a></li>
</ul>
</div>
ip地址的獲取
方案一.採用搜狐的接口
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
var f=returnCitySN["cip"]+','+returnCitySN["cname"];
//其中returnCitySN["cip"]獲取當前用戶的ip
//其中returnCitySN["cname"]獲取當前用戶所在的城市
方案二.直接在java裏面獲取當前用戶的ip,不能獲得地址
數據庫創建規範與是spring
創建規範:
不存在依賴關係
有主鍵
列不可分割,原子性
Spring:
輕量級控制反轉和麪向切面的MVC容器框架
事務:一系列的事,都成功,或者都失敗
構造函數也可以注入
配置事務管理器和事務的註解驅動
在application.xml裏面
//<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
//<!-- 事務的註解驅動 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!--
//事務通知
//<tx:advice id="txAdvice">
//<tx:attributes>
//所有方法使用缺省事務
//<tx:method name="*" />
//</tx:attributes>
//</tx:advice>
//<aop:config>
//定義切入點表達式
//<aop:pointcut id="defaultServiceOperation"
//expression="execution(* com.wanmait.demo.service.impl.AdminServiceImpl.login*(..))" />
//事務通知和切入點表達式進行關聯
<aop:advisor pointcut-ref="defaultServiceOperation"
advice-ref="txAdvice" />
</aop:config> -->
<aop:aspectj-autoproxy />
<context:component-scan base-package="com.wanmait.demo.service"></context:component-scan>
<context:component-scan base-package="com.wanmait.demo.aop"></context:component-scan>
事務一般加在業務邏輯層.ServiceImpl
@Transactional
mysql查詢最大值最小值分組
select cityName,Max(id),provinceId from city group by provinceId
group是分組
Max取最大值
ajax請求json和處理json:json
A--pom文件裏面
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.5</version>
</dependency>
B--Spring-mvc裏面
<mvc:annotation-driven >
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
C--jsp裏面
//將數據轉變成字符串
var jsonString = JSON.stringify(form);
<script type="text/javascript">
$("#aaa").click(function(){
$.ajax({
url:"manage/jjson", //請求的url地址
contentType:"application/json; charset=utf-8",
dataType:"json", //返回格式爲json
async:true,
data:JSON.stringify({ }),//傳遞json數據
type:"post",
success:function(mes){
$("#aao").empty();
for(var i=0;i<mes .length;i++)
{
$("#aao").append(mes[i].provincename);//append,往。。。裏面添加什麼東西
}
}
})
})
</script>
<div id="aao"></div>
第二種方式
$(function(){
getcourse();
$("#module").change(getcourse);
var c = $("#courseid").val();
function getcourse()
{
$("select[name=courseid]").empty();
var moduleid = $("#module").val();
$.getJSON("manage/knowledge/getcourse",{"moduleid":moduleid},function(list){
for(var i=0;i<list.length;i++)
{
if(list[i].courseid==c)
$("select[name=courseid]").append("<option selected value="+list[i].courseid+">"+list[i].coursename+"</option>");
else
$("select[name=courseid]").append("<option value="+list[i].courseid+">"+list[i].coursename+"</option>");
}
});
}
});
controller裏面
@RequestMapping("manage/jjson")
@ResponseBody
public void getjjson(HttpServletResponse response){
//查找全部省內容
List<Province> listprovince=pros.selectallinformation();
JSONArray jsonObject= new JSONArray(listprovince);
response.setCharacterEncoding("UTF-8");
PrintWriter writer=null;
try {
writer=response.getWriter();
writer.print(jsonObject);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在線編輯器設置
A--pom文件裏面
<dependency>
<groupId>cn.meddb</groupId>
<artifactId>ueditor</artifactId>
<version>20180110</version>
</dependency>
B--複製ueditor文件夾,在lib中config.json裏面配置
"imageUrlPrefix": "/wantTrain_maven", /* 圖片訪問路徑前綴 */
"imagePathFormat": "/images/{yyyy}{mm}{dd}{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */
C--在jsp裏面設置
<div class="block" >
<p class="block-heading">內容</p>
<div class="block-body"style="height:700px">
<textarea name="info" id="info">
</textarea>
</div>
</div>
<!-- 配置文件 -->
<script type="text/javascript"
src="<%=path%>/ueditor-utf8/ueditor.config.js"></script>
<!-- 編輯器源碼文件 -->
<script type="text/javascript"
src="<%=path%>/ueditor-utf8/ueditor.all.min.js"></script>
<!-- 實例化編輯器 -->
<script type="text/javascript">
var ue = UE.getEditor('info', {
initialFrameWidth : 850,
initialFrameHeight:600,
toolbars: [[
'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript',
'customstyle', 'paragraph', 'fontfamily', 'fontsize',
'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', 'simpleupload', 'emotion'
]]
});
</script>
正則 驗證
//不能以_開頭和結尾的3-15個合法字符
var zz = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]{3,15}$/;
var flag=zz.test(name);
/D除了數字之外的
/d數字
var zz = /^(?!_)(?!.*?_$)[\u4e00-\u9fa5]+$/;
var zzz = /^(?!_)(?!.*?_$)[a-z]+$/;
var zza = /^(?!_)(?!.*?_$)[A-Z]+$/;
var flag = zz.test(provincename);
var flag2=zzz.test(quanpin);
var flag3=zza.test(jianpin);
a.只有字母、數字和下劃線且不能以下劃線開頭和結尾的正則表達式:^(?!_)(?!.*?_$)[a-zA-Z0-9_]+$
只有字母和數字的: ^[a-zA-Z0-9_]+$
b. 至少一個漢字、數字、字母、下劃線: "[a-zA-Z0-9_\u4e00-\u9fa5]+"
c.至少一個漢字的正則表達式:"^[\u4e00-\u9fa5]"
d. 最多10個漢字: ValidationExpression="^[\u4e00-\u9fa5]{0,10}"
e. 只含有漢字、數字、字母、下劃線不能以下劃線開頭和結尾:^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$
解釋:
^ 與字符串開始的地方匹配
(?!_) 不能以_開頭
(?!.*?_$) 不能以_結尾
[a-zA-Z0-9_\u4e00-\u9fa5]+ 至少一個漢字、數字、字母、下劃線
$與字符串結束的地方匹配
f. email正則表達式:兩種方式都可以
(1) \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
(2) ^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*((\\.[A-Za-z]{2,}){1}$)
縮略 截取顯示
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<td title="${listarticle.title }">
<c:if test="${fn:length(listarticle.title)>5 }">${fn:substring(listarticle.title,0,5) }....</c:if>
<c:if test="${fn:length(listarticle.title)<=5 }">${listarticle.title }</c:if>
</td>
jsp頁面jstl標籤中的時間比較
<c:set var="nowDate" value="<%=new java.util.Date() %>"></c:set>
<c:if test="${nowDate >listad.endTime}">
<i class="icon-truck">已經過期</i>
</c:if>
<c:if test="${nowDate <listad.endTime&&nowDate>listad.startTime }">
<i class="icon-truck">廣告已到運行時間,是否運行?</i>
</c:if>
<c:if test="${nowDate <listad.startTime }">
<i class="icon-truck">廣告還未到運行期限</i>
</c:if>
json返回時間格式化
//通過json轉化的時間爲一串字符
var endtime = new Date(mes[i].endTime);
var a=endtime.getFullYear()+"-"+(endtime.getMonth()+1)+"-"+endtime.getDate();
var starttime=new Date(mes[i].startTime);
var b=starttime.getFullYear()+"-"+(starttime.getMonth()+1)+"-"+starttime.getDate();
java裏面的時間比較
//在java裏講string轉換成date並進行時間比較
try {
Date starttime = df.parse(starttimes);
Date endtime = df.parse(endtimes);
ad.setStartTime(starttime);
ad.setEndTime(endtime);
long diff = endtime.getTime() - starttime.getTime();//這樣得到的差值是微秒級別
days = (int)diff / (1000 * 60 * 60 * 24);
System.out.println(days);
System.out.println(adlocationid);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//字符串時間轉換和比較
//Timestamp time;
String s="2017-10-28 00:00:00";
Timestamp t2 = new Timestamp(System.currentTimeMillis());//獲得當前系統時間
Timestamp ts2 = Timestamp.valueOf(s);//string->Timestamp
time=ts2;
System.out.println(time);
//時間比較大小,1爲大,0爲相等,-1爲小
int compareTo = ts2.compareTo(ts2);
System.out.println(compareTo);
在mysql中時間比較方式爲
select *from evaluate where time>'2018-01-27 12:18:31' and time<'2018-01-27 12:22:11'
數據庫mysql中的時間相加減的問題和比較
MySQL 日期、時間相減
函數:datediff(date1,date2), timediff(time1,time2)
MySQL datediff(date1,date2):兩個日期相減 date1 – date2,返回天數。
select datediff(‘2008-08-08′, ‘2008-08-01′); — 7
select datediff(‘2008-08-01′, ‘2008-08-08′); — -7
MySQL timediff(time1,time2):兩個日期相減 time1 – time2,返回 time 差值。
select timediff(‘2008-08-08 08:08:08′, ‘2008-08-08 00:00:00′); — 08:08:08
select timediff(’08:08:08′, ’00:00:00′); — 08:08:08
注意:timediff(time1,time2) 函數的兩個參數類型必須相同。
日期轉換函數、時間轉換函數
(時間、秒)轉換
函數:time_to_sec(time), sec_to_time(seconds)
select time_to_sec(’01:00:05′); — 3605
select sec_to_time(3605); — ’01:00:05′
(日期、天數)轉換
to_days(date), from_days(days)
select to_days(‘0000-00-00′); — 0
select to_days(‘2008-08-08′); — 733627
select from_days(0); — ‘0000-00-00′
select from_days(733627); — ‘2008-08-08′
MySQL Str to Date (字符串轉換爲日期)
函數:str_to_date(str, format)
select str_to_date(’08/09/2008′, ‘%m/%d/%Y’); — 2008-08-09
select str_to_date(’08/09/08′ , ‘%m/%d/%y’); — 2008-08-09
select str_to_date(‘08.09.2008′, ‘%m.%d.%Y’); — 2008-08-09
select str_to_date(’08:09:30′, ‘%h:%i:%s’); — 08:09:30
select str_to_date(‘08.09.2008 08:09:30′, ‘%m.%d.%Y %h:%i:%s’); — 2008-08-09 08:09:30
MySQL 獲得國家地區時間格式
函數:get_format()
MySQL get_format() 語法:
get_format(date|time|datetime, ‘eur’|’usa’|’jis’|’iso’|’internal’
獲得當前日期 + 時間(date + time)
函數:now()
獲得當前日期 + 時間(date + time)
函數:sysdate()
sysdate() 日期時間函數跟 now() 類似,不同之處在於:now() 在執行開始時值就得到了, sysdate() 在函數執行時動態得到值
獲得當前日期(date)
函數:curdate()
獲得當前時間(time)
函數:curtime()
alter user hr account unlock 解鎖
序列
外鍵:foreign 主鍵 primary
循環嵌套數據重複問題
解決辦法
<c:set var="flag" value="0"></c:set>
<c:forEach items="${requestScope.OneManagerAllMenuType }" var="OneManagerAllMenuType" varStatus="stat">
<c:if test="${OneManagerAllMenuType.menuId.id==firstMenuType.id}">
<c:set var="flag" value="1"></c:set>
</c:if>
</c:forEach>
<c:if test="${flag==1 }">
<td><a href="Javascript:void(0)" ><i class="icon-heart"></i></a></td>
</c:if>
<c:if test="${flag==0 }">
<td><a href="Javascript:void(0)" ><i class="icon-heart-empty"></i></a></td>
</c:if>
lucene
//pom文件裏面
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>6.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>6.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>6.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>6.4.1</version>
</dependency>
<dependency>
<groupId>com.janeluo</groupId>
<artifactId>ikanalyzer</artifactId>
<version>2012_u6</version>
</dependency>
//controller裏面
//創建索引
@RequestMapping("createArticleIndex")
@ResponseBody
public void createArticleIndex(HttpServletRequest request,HttpServletResponse response){
//更新config表裏面的文章索引的創建時間
Config config =new Config();
config.setId(12);
//將現在的時間改爲字符串添加到value裏面
String dateStr = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
config.setValue(dateStr);
cs.updateById(config);
//創建文章的索引
String indexDir=request.getSession().getServletContext().getRealPath("/ArticleIndex");
System.out.println(indexDir);
List<Article> allArticle=arts.findAllArticle();
IndexWriter indexWriter = null;
// 索引存儲路徑
Directory dir = null;
try {
dir = FSDirectory.open(Paths.get(indexDir));
// 標準分詞器
//StandardAnalyzer analyzer = new StandardAnalyzer();
IKAnalyzer analyzer = new IKAnalyzer();
//HanLP.segment(indexDir);
//HanLP analyzer = new HanLP();
// 寫入器配置
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
// 索引寫入器
indexWriter = new IndexWriter(dir, indexWriterConfig);
// 刪除原有索引
indexWriter.deleteAll();
Document doc = null;
// 添加索引文檔到寫入器
for (Article article : allArticle) {
// 創建文檔
doc = new Document();
// 添加字段
Field idField = new IntPoint("id", article.getId());
doc.add(idField);
doc.add(new StoredField("id", article.getId()));
doc.add(new NumericDocValuesField("id", article.getId()));
Field titleField = new TextField("title", article.getTitle(),Store.YES);
doc.add(titleField);
Field nameField = new TextField("name", article.getAdmin().getUsername(),Store.YES);
doc.add(nameField);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
doc.add(new StringField("inputTime", dateFormat.format(article.getInputTime()), Store.YES));
indexWriter.addDocument(doc);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (indexWriter != null) {
try {
indexWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (dir != null) {
try {
dir.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//進行搜索
@RequestMapping("searchArticleIndex")
@ResponseBody
public List<Article> searchArticleIndex(Integer count,String type,String keyword,HttpServletRequest request){
//搜索查找文章
String indexDir=request.getSession().getServletContext().getRealPath("/ArticleIndex");
List<Article> allArticle = new ArrayList<Article>();
Directory dir = null;
IndexReader indexReader = null;
try {
dir = FSDirectory.open(Paths.get(indexDir));
indexReader = DirectoryReader.open(dir);
// 索引查詢器
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// 分詞器,要和創建索引的時候使用的分詞器相同
// StandardAnalyzer analyzer = new StandardAnalyzer();
IKAnalyzer analyzer = new IKAnalyzer();
// 查詢解析器,查詢名爲title的字段
QueryParser queryParser = new QueryParser(type, analyzer);
Query query = queryParser.parse(keyword);
// 返回最多10個相關度最高的文檔
// TopDocs topDocs = indexSearcher.search(query, 10);
// 默認按着升序進行排序
// SortField sortField = new SortField("id", Type.INT);
// 第三個參數表示是否按着降序排序,不指定默認按着升序
SortField sortField = new SortField("id", Type.INT, true);
Sort sort = new Sort(sortField);
// TopDocs topDocs = indexSearcher.search(query, 10,sort);
TopDocs topDocs = indexSearcher.search(query,count, sort, true, false);
// 高亮顯示
QueryScorer queryScorer = new QueryScorer(query);
// 得到得分片段,即包含查詢關鍵詞的摘要
Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer);
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(
"<b><font color='red'>", "</font></b>");// 對查詢的數據格式化;無參構造器的默認是將關鍵字加粗
Highlighter highlighter = new Highlighter(simpleHTMLFormatter,
queryScorer);
highlighter.setTextFragmenter(fragmenter);// 設置成高亮
// 獲得得分文檔集合
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
Article at = null;
for (ScoreDoc scoreDoc : scoreDocs) {
// 文檔編號
int docId = scoreDoc.doc;
// 獲得文檔
Document doc = indexSearcher.doc(docId);
String id = doc.get("id");
String title = doc.get("title");
if (title != null) {
TokenStream tokenStream = analyzer.tokenStream("title",title);
try {
title = highlighter.getBestFragment(tokenStream, title);
} catch (InvalidTokenOffsetsException e) {
e.printStackTrace();
}
System.out.println("title=" + title);
}
String name=doc.get("name");
String inputTime = doc.get("inputTime");
at = new Article();
Admin admin=new Admin();
admin.setUsername(name);
at.setAdmin(admin);
at.setId(Integer.parseInt(id));
at.setTitle(title);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
at.setInputTime(new Timestamp(dateFormat.parse(inputTime).getTime()));
allArticle.add(at);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (indexReader != null) {
try {
indexReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (dir != null) {
try {
dir.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return allArticle;
}
//其他補充
//查詢多個字段
//QueryParser queryParser = new QueryParser("title", analyzer);
//Query query = queryParser.parse(keyword);
//Occur.MUST表示對應字段必須有查詢值, Occur.MUST_NOT 表示對應字段必須沒有查詢值,Occur.SHOULD表示對應字段應該存在查詢值(但不是必須)
Occur[] occurs ={Occur.SHOULD,Occur.SHOULD};
Query query = MultiFieldQueryParser.parse(keyword, new String[]{"title","info"}, occurs,analyzer);
//多個關鍵詞使用字符串數組
//Query query = MultiFieldQueryParser.parse(new String[]{"核彈頭","儀式"}, new String[]{"title","info"}, occurs,analyzer);
table顯示格式
<table>
<thead>
<tr>
<th><input type="checkbox" id="allchose"></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
ajax修改排序
js代碼:
$("[id=focues]").blur(function(){
var sort=$(this).val();
var id=$(this).next().next().html();
$.ajax({
url:"updatesort",
type:"post",
data:{id:id,orderNumber:sort},
success:function(mes){
location.href=location.href
}
})
})
Mapper代碼
<update id="updatesort" parameterType="vo.Emp">
update emp set emp.orderNumber=#{orderNumber} where emp.id=#{id}
</update>
在新窗口中打開一個超鏈接
<a href=url target="_blank">
讓文本的每個單詞都是以大寫字母開頭
text-transform:capitalize
確認對話框
confirm();可以確定和取消
alert():只有確認
滾動條
overflow:scroll
打開頁面就會導入的畫面
onload();
配置歡迎頁面
在web.xml裏面配置
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
在SpringMVC裏面配置
<mvc:view-controller path="/" view-name="index"/>