JSP、El表示式、JSTL表示式筆記
html改jsp替換標頭檔案
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title></title>往上替換
定義完以上之後,<%= basePath %>/jsp/hello.jsp 相當於全路徑
El表示式
語法結構${expression}
JSTL(JSP標準標籤庫)
<% %> <%= %>
${pageContext.request.contextPath}等價於<%=request.getContextPath()%> 或者可以說是<%=request.getContextPath()%>的EL版 意思就是取出部署的應用程式名或者是當前的專案名稱
比如我的專案名稱是ajax01 在瀏覽器中輸入為
http://localhost:8080/ajax01/login.jsp
${pageContext.request.contextPath}或<%=request.getContextPath()%>取出來的就是/ajax01,而"/"代表的含義就是http://localhost:8080
所以我們專案中應該這樣寫${pageContext.request.contextPath}/login.jsp,這種方式還是一種相對路徑取法;<%= basePath %>/jsp/hello.jsp是絕對路徑取法。
清除input框快取歷史記錄
<input class="" type="text" autocomplete="off" />
遍歷(c:foreach)
<c:forEach items="${empList}" var="emp" varStatus="status">
<tr>
<td>${status.count}</td>
<td>${emp.EMPNO}</td>
<td>${emp.ENAME}</td>
<td>
<a href="#">修改</a>
<a href="#">刪除</a>
</td>
</tr>
</c:forEach>
其中varStatus可以給每行新增編號,其中${status.count}從1開始;${status.index}從0開始
a標籤的跳轉
<a href="javascript:void(0)"></a> 點選此a標籤不跳轉任何程式碼
<a href="emp/toUpdateEmp?${emp.EMPNO}">修改</a>
<a href="javascript:del(${emp.EMPNO})">刪除</a>
下拉選單的選擇和傳值
jsp頁面中
<select name="DEPTNO">
<option value="1">=請選擇=</option>
<c:forEach items="${deptList}" var="dept">
<option value="${dept.DEPTNO}">${dept.DNAME}</option>
</c:forEach>
</select>
controller層接收
@RequestMapping("addEmp")
public String addEmp(@RequestParam Map map){
int row=empService.addEmp(map);
if(row>0){
return "redirect:empList";
}
return "emp/errorEmp";
}
通過@RequestParam接收到引數map,用map.get("DEPTNO")獲取選擇值
date型別的傳遞
jsp頁面中、
<tr>
<td>僱傭日期</td>
<td><input type="date" name="HIREDATE"/></td>
</tr>
mapper檔案中,寫插入語句時候需要用 to_date 轉化為date型別才能存入資料庫
to_date(#{HIREDATE},'yyyy-mm-dd')
<fmt:formatDate>標籤格式化日期
在springmvc的demo中有用到
jsp頁面引入標籤
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
在需要格式化時用以下方法取值
<fmt:formatDate value="${item.itemDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
其中,item是實體,其中的itemDate是實體的欄位,型別為java.util.Date
給下拉選單賦初始值
jsp頁面中select引入id="deptNo"
JS寫法
<script type="text/javascript">
window.onload=function(){
//JS方式設定下拉框的初始值
var deptNo="${empMap.DEPTNO}";
//JS方法賦值
document.getElementById("deptNo").value=deptNo;
}
</script>
JQuery寫法(使用前需要先引入一個jQuery庫)
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
$(function(){
//JQuery方式設定下拉框的初始值
var deptNo="${empMap.DEPTNO}";
$("#deptNo").val(deptNo); jquery方法賦值
});
執行跳轉時先進行confirm彈框判斷的方法
跳轉
<a href="javascript:del(${emp.EMPNO})">刪除</a>
JS函式
function del(empNo){
var d=confirm("確認刪除此員工?");
if(d){
window.location.href="emp/deleteEmp?EMPNO="+empNo;
}
}
也可以寫JS如下
function del(empNo){
if(confirm("確認刪除此員工?")){
window.location.href="emp/deleteEmp?EMPNO="+empNo;
}
}
JOSN傳值
@RequestMapping(value="/api/subq/expressSub",method={ RequestMethod.POST )
@ResponseBody
public BaseResp expressSub(@RequestBody JSONObject body){
//先定義變數
String num = "";
String comCode = "";
// 判斷num引數是否合法,並取值
if (body.containsKey("num")) {
num = body.getString("num");
if ("".equals(StringUtils.deleteWhitespace(num))) {
return DataResp.fail("", "快遞單號不能為空");
}
} else {
return DataResp.fail("", "快遞單號為必填項");
}
// 判斷comCOde引數是否合法
if (body.containsKey("comCode")) {
comCode = body.getString("comCode");
if ("".equals(StringUtils.deleteWhitespace(comCode))) {
return DataResp.fail("", "快遞公司程式碼不能為空");
}
} else {
return DataResp.fail("", "快遞公司程式碼為必填項");
}
}
//下邊可以直接使用取到值的num和comCode
}
Ctrl返回值問題
返回值為void,可以直接return ;
public void save(){
……
return ;
}
表單必填項
必填選項紅色星標<span style=”color:red;”></span>