1.由html修改为jsp_1:设计变量
1)根据需要找出哪些是变化的部分,哪些是固定不变的部分
2)考虑变化的部分需要哪些数据和变量,把那个将这些数据罗列出来,分别起一个有意义的变量
3)将2)中的变量做区分,区分出哪些是必须由后台传入的(记为变量集合A),哪些是可以从由后台传来的数据中得出的(记为变量集合B)
4)对于A中的每一个变量,都首先采用request.getAttribute("Paraname")方法进行获取
5)对于B中的变量,根据相应逻辑求出即可,至此,变量的准备工作完成,与servelt的实现尚且无关
2.根据jsp中所需变量,编写servlet
1)设置变量
对于1.(4)中的没一条语句,都写上对应的setAttribut("Paraname",para);
尤其要注意,其中的paraname 要与1.4)中的paraname完全相同,para要与1.A中的变量类型完全相同
2)根据相应逻辑得出1)中所需要的变量,
在写代码的时候,这一步要在1)之前,但是分析的时候,要做在)之后
3)最后,调用forwar方法进行带有参数传递的页面跳转,
详见https://blog.csdn.net/slj2017/article/details/81074670一篇中的"数据处理与返回"
3.由html修改为jsp_2:修改可变部分
将html dom中的需要改变的部分,通过jsp脚本进行逻辑上的修改
总结:
1 与 2, 3 之间有先后顺序,一般的,1在2,3之前完成,2,3,根据1总结出的变量进行修改
最好一次性将1完美完成,这样就不会在做修改,但是,有时候可能会在做3的时候发现1中变量设置不足,因此需要在1中增加变量这样,当增加的是必须传入的变量的时候,就会需要在2中进行相应的修改
总体来说,2,3 两步可以并行的进行,前提都是参考1中已有的变量
令附上今天编写的jsp文件和servelt代码 (预算配额设置)
jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
String depNames[] = (String[]) request.getAttribute("depNames");
String[] dates = (String[]) request.getAttribute("dates");
String[] lastlimitmoneys = (String[]) request.getAttribute("lastlimitmoneys");
String[] budgetmoneys = (String[]) request.getAttribute("budgetmoneys");
String aca_name = (String) request.getAttribute("aca_name");
String[] depIds = (String[]) request.getAttribute("depIds");
String selected_depname = (String)request.getAttribute("depname");
int thisPage = (int) request.getAttribute("thisPage");
int pagecount = 0;
if (depNames != null) {
pagecount = (int) Math.ceil((double) depNames.length / 10);
}
//bar parameters
String userid = (String) request.getAttribute("userid");
String userName = (String) request.getAttribute("userName");
//未读消息
String messages[] = (String[]) request.getAttribute("messages");
String messageDates[] = (String[]) request.getAttribute("messageDates");
String messagefroms[] = (String[]) request.getAttribute("messageFrom");
int messageNum = 0;
if(messages!=null)
messageNum = messages.length;
//跟日内信息
String userId = (String)request.getAttribute("userId");
//权限
String power = (String) request.getAttribute("power");
%>
<!doctype html>
<html>
<head>
<link rel="stylesheet"
href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>设置单位定额</title>
<meta name="description" content="这是一个 index 页面">
<meta name="keywords" content="index">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="renderer" content="webkit">
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link rel="icon" type="image/png" href="assets/i/favicon.png">
<link rel="apple-touch-icon-precomposed"
href="assets/i/app-icon72x72@2x.png">
<meta name="apple-mobile-web-app-title" content="Amaze UI" />
<link rel="stylesheet" href="assets/css/amazeui.min.css" />
<link rel="stylesheet" href="assets/css/admin.css">
<link rel="stylesheet" href="assets/css/app.css">
</head>
<body data-type="generalComponents">
<header class="am-topbar am-topbar-inverse admin-header">
<div class="am-topbar-brand">
<a href="javascript:;" class="tpl-logo"> <img
src="assets/img/logo.png" alt="">
</a>
</div>
<div
class="am-icon-list tpl-header-nav-hover-ico am-fl am-margin-right">
</div>
<button
class="am-topbar-btn am-topbar-toggle am-btn am-btn-sm am-btn-success am-show-sm-only"
data-am-collapse="{target: '#topbar-collapse'}">
<span class="am-sr-only">导航切换</span> <span class="am-icon-bars"></span>
</button>
<div class="am-collapse am-topbar-collapse" id="topbar-collapse">
<ul
class="am-nav am-nav-pills am-topbar-nav am-topbar-right admin-header-list tpl-header-list">
<li class="am-dropdown" data-am-dropdown data-am-dropdown-toggle>
<a class="am-dropdown-toggle tpl-header-list-link"
href="javascript:;"> <span class="am-icon-comment-o"></span> 消息
<span
class="<%=messageNum>0?"am-badge tpl-badge-danger am-round":"" %>"><%=messageNum>0?""+messageNum:""%></span></span>
</a>
<ul class="am-dropdown-content tpl-dropdown-content">
<li class="tpl-dropdown-content-external">
<h3>
你有 <span class="tpl-color-danger"><%=messageNum%></span> 条新消息
</h3> <a href="#">全部</a>
</li>
<li>
<!-- 消息列表 --> <%
for (int i = 0; i < messageNum; i++) {
String messgeListContent = "<a href=\"#\" class=\"tpl-dropdown-content-message\"> <span"
+ "class=\"tpl-dropdown-content-photo\"> <img" + "src=\"assets/img/user02.png\" alt=\"\">"
+ "</span> <span class=\"tpl-dropdown-content-subject\"> <span"
+ "class=\"tpl-dropdown-content-from\"> "+messagefroms[i]+" </span> <span"
+ "class=\"tpl-dropdown-content-time\">"+messageDates[i]+"</span>"
+ "</span> <span class=\"tpl-dropdown-content-font\">"+messages[i]+" </span>" + "</a>";
out.print(messgeListContent);
}
%>
</li>
</ul>
</li>
<li class="am-hide-sm-only"><a href="javascript:;"
id="admin-fullscreen" class="tpl-header-list-link"><span
class="am-icon-arrows-alt"></span> <span class="admin-fullText">开启全屏</span></a></li>
<li class="am-dropdown" data-am-dropdown data-am-dropdown-toggle>
<a class="am-dropdown-toggle tpl-header-list-link"
href="javascript:;"> <span class="tpl-header-list-user-nick"><%=userName %></span><span
class="tpl-header-list-user-ico"> <img
src="assets/img/user01.png"></span>
</a>
<ul class="am-dropdown-content">
<li><a href="#"><span class="am-icon-bell-o"></span> 资料</a></li>
<li><a href="#"><span class="am-icon-cog"></span> 设置</a></li>
<li><a href="#"><span class="am-icon-power-off"></span>
退出</a></li>
</ul>
</li>
<li><a href="###" class="tpl-header-list-link"><span
class="am-icon-sign-out tpl-header-list-ico-out-size"></span></a></li>
</ul>
</div>
</header>
<div class="tpl-page-container tpl-page-header-fixed">
<div class="tpl-left-nav tpl-left-nav-hover">
<div class="tpl-left-nav-title">Amaze UI 列表</div>
<div class="tpl-left-nav-list">
<ul class="tpl-left-nav-menu">
<li class="tpl-left-nav-item"><a href="index.html"
class="nav-link active"> <i class="am-icon-home"></i> <span>首页</span>
</a></li>
<li class="tpl-left-nav-item"><a href="chart.html"
class="nav-link tpl-left-nav-link-list"> <i
class="am-icon-bar-chart"></i> <span>数据表</span> <i
class="tpl-left-nav-content tpl-badge-danger"> 12 </i>
</a></li>
<li class="tpl-left-nav-item">
<!-- 打开状态 a 标签添加 active 即可 --> <a href="javascript:;"
class="nav-link tpl-left-nav-link-list active"> <i
class="am-icon-table"></i> <span>表格</span> <!-- 列表打开状态的i标签添加 tpl-left-nav-more-ico-rotate 图表即90°旋转 -->
<i
class="am-icon-angle-right tpl-left-nav-more-ico am-fr am-margin-right tpl-left-nav-more-ico-rotate"></i>
</a>
<ul class="tpl-left-nav-sub-menu" style="display:block">
<li>
<!-- 打开状态 a 标签添加 active 即可 --> <a href="设置单位定额.html"
class="active"> <i class="am-icon-angle-right"></i>设置单位定额<i
class="am-icon-star tpl-left-nav-content-ico am-fr am-margin-right"></i>
</a> <a href="table-images-list.html"> <i
class="am-icon-angle-right"></i> <span>图片表格</span> <i
class="tpl-left-nav-content tpl-badge-success"> 18 </i> <a
href="个人中心.html"> <i class="am-icon-angle-right"></i> <span>个人中心</span>
<i
class="<%=messageNum>0?"tpl-left-nav-content tpl-badge-primary":"" %>">
<%=messageNum>0?""+messageNum:"" %>
</i> <a href="form-news-list.html"> <i
class="am-icon-angle-right"></i> <span>文字列表</span>
</a>
</li>
</ul>
</li>
<li class="tpl-left-nav-item"><a href="javascript:;"
class="nav-link tpl-left-nav-link-list"> <i
class="am-icon-wpforms"></i> <span>表单</span> <i
class="am-icon-angle-right tpl-left-nav-more-ico am-fr am-margin-right"></i>
</a>
<ul class="tpl-left-nav-sub-menu">
<li><a href="form-amazeui.html"> <i
class="am-icon-angle-right"></i> <span>Amaze UI 表单</span> <i
class="am-icon-star tpl-left-nav-content-ico am-fr am-margin-right"></i>
</a> <a href="form-line.html"> <i class="am-icon-angle-right"></i>
<span>线条表单</span>
</a></li>
</ul></li>
<li class="tpl-left-nav-item"><a href="login.html"
class="nav-link tpl-left-nav-link-list"> <i
class="am-icon-key"></i> <span>登录</span>
</a></li>
</ul>
</div>
</div>
<div class="tpl-content-wrapper">
<div class="tpl-content-page-title">设置单位定额</div>
<ol class="am-breadcrumb">
<li><a href="index.html" class="am-icon-home">首页</a></li>
<li class="am-active">设置单位定额</li>
</ol>
<div class="tpl-portlet-components">
<div class="portlet-title">
<div class="caption font-green bold">
<span class="am-icon-code"></span>项目列表
</div>
</div>
<div class="tpl-block">
<div class="am-g">
<div class="am-u-sm-12 am-u-md-6">
<div class="am-btn-toolbar">
<div class="am-btn-group am-btn-group-xs">
<button type="button"
class="am-btn am-btn-default am-btn-success">
<span class="am-icon-plus"></span> 新增
</button>
<button type="button"
class="am-btn am-btn-default am-btn-secondary">
<span class="am-icon-save"></span> 保存
</button>
<button type="button"
class="am-btn am-btn-default am-btn-warning">
<span class="am-icon-archive"></span>提交
</button>
<button type="button"
class="am-btn am-btn-default am-btn-danger">
<span class="am-icon-trash-o"></span> 删除
</button>
</div>
</div>
</div>
<div class="am-u-sm-12 am-u-md-3">
<div class="am-form-group">
<select data-am-selected="{btnSize: 'sm'}" id="dep_select"
onchange="selectDepOnFilterChange()">
<!-- Option-->
<option value="all_deps">所有部门</option>
<%
Set<String> deps = new HashSet<String>();
for (int i = 0; i < depNames.length; i++) {
deps.add(depNames[i]);
}
for (String depname : deps) {
String optionConyent = "<option value=\"" + depname + "\">" + depname + "</option>";
out.print(optionConyent);
}
%>
</select>
</div>
</div>
<div class="am-u-sm-12 am-u-md-3">
<div class="am-input-group am-input-group-sm">
<input type="text" class="am-form-field" placeholder="查找项目...">
<span class="am-input-group-btn">
<button
class="am-btn am-btn-default am-btn-success tpl-am-btn-success am-icon-search"
type="button"></button>
</span>
</div>
</div>
</div>
<div class="am-g">
<div class="am-u-sm-12">
<form class="am-form">
<table
class="am-table am-table-striped am-table-hover table-main">
<thead>
<tr>
<th width="20" class="table-check"><input
type="checkbox" class="tpl-table-fz-check"></th>
<th width="50" class="table-id">ID</th>
<th width="146" class="table-type">部门</th>
<th width="146" class="table-date am-hide-sm-only">修改日期</th>
<th width="168" class="table-set">推荐金额(元)</th>
<th width="168" class="table-set">申报金额(元)</th>
<th width="168" class="table-set">设置单位定额(元)</th>
<th width="172" class="table-set">操作</th>
</tr>
</thead>
<tbody>
<%
// <!-- TR
for (int i = thisPage * 10; i < (thisPage + 1) * 10 && i < depIds.length; i++) {
if(selected_depname!=null&&!selected_depname.equals("all_deps")&&!depNames[i].equals(selected_depname))continue;
String tr_content = "<tr>" + " <td><input type=\"checkbox\"></td>" + " <td tag=\"depId\">"
+ depIds[i] + "</td>" + " <td>" + depNames[i] + "</td>"
+ " <td tag=\"itemdate\" class=\"am-hide-sm-only\">" + dates[i] + "</td>" + " <td>"
+ lastlimitmoneys[i] + "</td>" + " <td tag=\"budgetMoney\">" + budgetmoneys[i] + "</td>"
+ " <td><div class=\"input-group\">" + "<input type=\"text\" class=\"form-control\" value="
+ lastlimitmoneys[i] + ">" + "<span class=\"input-group-addon\">元</span>" + "</div></td>"
+ " <td>" + " <div class=\"am-btn-toolbar\">" + "<div class=\"am-btn-group am-btn-group-xs\">"
+ " <button class=\"am-btn am-btn-default am-btn-xs am-text-secondary\" type=\"button\" onClick=\"edit(this)\"><span class=\"am-icon-pencil-square-o\"></span> 设置</button>"
+ " <button class=\"am-btn am-btn-default am-btn-xs am-hide-sm-only\" type=\"button\" onClick=\"save(this)\"><span class=\"am-icon-save\"></span> 保存</button>"
+ " </div>" + " </div>" + " </td>" + "</tr>";
// -->
out.println(tr_content);
}
%>
</tbody>
</table>
<div class="am-cf">
<div class="am-fr">
<ul class="am-pagination tpl-pagination">
<!-- Button -->
<%
String last_url = "?aca_name=" + aca_name + "&" + "thisPage=" + (thisPage - 1);
String li_last = "<li " + (thisPage > 0 ? "" : "class=\"am-disabled\"") + "><a href=\"" + last_url
+ "\">«</a></li>";
out.print(li_last);
for (int i = 0; i < pagecount; i++) {
String li_content;
String url = "?aca_name=" + aca_name + "&" + "thisPage=" + i;
if (i == thisPage) {
li_content = "<li class=\"am-active\"><a href=\"" + url + "\">" + (i + 1) + "</a></li>";
} else {
li_content = "<li ><a href=\"" + url + "\">" + (i + 1) + "</a></li>";
}
out.print(li_content);
}
String next_url = "?aca_name=" + aca_name + "&" + "thisPage=" + (thisPage + 1);
String li_next = "<li " + (thisPage < pagecount - 1 ? "" : "class=\"am-disabled\"") + "><a href=\""
+ next_url + "\">»</a></li>";
out.print(li_next);
%>
</ul>
</div>
</div>
<hr>
</form>
</div>
</div>
</div>
<div class="tpl-alert"></div>
</div>
</div>
</div>
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/amazeui.min.js"></script>
<script src="assets/js/app.js"></script>
</body>
<script src="assets/js/editandsave.js"></script>
<script type="text/javascript">
<%
String html = "var dep_select = document.getElementById(\"dep_select\");"+
"var optionNum = dep_select.options.length;"+
//"alert(optionNum);"+
"for(var i = 0;i<optionNum;i++){"+
//"alert('yess'+i);"+
"if(dep_select.options[i].value=='"+selected_depname+"'){"+
//"alert('have');"+
"dep_select.selectedIndex=i;break;}}";
out.print(html);
%>
</script>
</html>
servlet
package Service.servlets;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import Bean.Adbudget;
import Bean.Department;
import Bean.Message;
import DAO.Department_DAO;
import Service.Logic.DoSomething;
/**
* Servlet implementation class listOfDepBudget
*/
@WebServlet("/listOfDepBudget")
public class ListOfDepBudget extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ListOfDepBudget() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
// response.getWriter().append("Served at:
// ").append(request.getContextPath());
process(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
// doGet(request, response);
process(request, response);
}
private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String aca_name = request.getParameter("aca_name");
//当前页,从0开始
int thisPage = Integer.parseInt(request.getParameter("thisPage"));
String uiserId = request.getParameter("userId");
String depname = request.getParameter("depname");
DoSomething ds = new DoSomething();
List<Adbudget> adbudgets= ds.selectAdBudgetByAcaName(aca_name);
//System.out.println(adbudgets.size());
/*
* depNames = (String[])request.getAttribute("depNames"); dates =
* (String[])request.getAttribute("dates"); lastlimitmoneys =
* (String[])request.getAttribute("lastlimitmoneys"); budgetmoneys =
* (String[])request.getAttribute("budgetmoneys");
*
*/
String depNames[] = new String[adbudgets.size()];
String dates[] = new String[adbudgets.size()];
String lastlimitmoneys[] = new String[adbudgets.size()];
String budgetmoneys[] = new String[adbudgets.size()];
String depids[] = new String[adbudgets.size()];
// int thisPage ;
for (int i = 0; i < adbudgets.size(); i++) {
depids[i]= adbudgets.get(i).getDep_id();
depNames[i] = getDepNameById(depids[i]);
dates[i] = adbudgets.get(i).getDate();
lastlimitmoneys[i] = "" + adbudgets.get(i).getLimit_money();
budgetmoneys[i] = "" + adbudgets.get(i).getMoney();
}
request.setAttribute("depNames", depNames);
request.setAttribute("dates", dates);
request.setAttribute("lastlimitmoneys", lastlimitmoneys);
request.setAttribute("budgetmoneys", budgetmoneys);
request.setAttribute("thisPage", thisPage);
request.setAttribute("aca_name", aca_name);
request.setAttribute("depIds", depids);
request.setAttribute("depname", depname);
//System.out.println(depids.length);
Object messageObj[]=ds.selectMessageByUserId(uiserId);
List<Message> msgList1 = (List<Message>) messageObj[1];
List<Message>msgList2 =null;
ArrayList<Message>notReadMessages = new ArrayList<Message>();
if(messageObj.length==3){
msgList2 = (List<Message>) messageObj[2];
}
//int messageNum = msgList1.size()+(msgList2==null?0:msgList2.size());
for(int i = 0;i<msgList1.size();i++){
if(!msgList1.get(i).getState().equals(DoSomething.MESSAGE_STATE_NOTREAD))continue;
notReadMessages.add(msgList1.get(i));
}
if(msgList2!=null){
for(int i = 0;i<msgList2.size();i++){
if(!msgList2.get(i).getState().equals(DoSomething.MESSAGE_STATE_NOTREAD))continue;
notReadMessages.add(msgList2.get(i));
}
}
String messages[] = new String[notReadMessages.size()];
String messageDates[]= new String[notReadMessages.size()];
String messageFrom[]= new String[notReadMessages.size()];
int i = 0;
for(Message msg:notReadMessages){
messages[i]=msg.getContent();
messageDates[i] = msg.getDate();
if(msg.getMsgtype().equals(DoSomething.MESSAGE_TYPE_DEP_TO_PERSON)){
messageFrom[i]= ds.getDepartmentByDepartmentId(msg.getDep_id()).getDep_name();
}else if(msg.getMsgtype().equals(DoSomething.MESSAGE_TYPE_ACADMY_TO_DEP)){
messageFrom[i] = msg.getAca_name();
}else if(msg.getMsgtype().equals(DoSomething.MESSAGE_TYPE_SCHOOL_TO_ACADMY)){
messageFrom[i] = msg.getSch_name();
}
i++;
//messageFrom[i] = msg.get
}
// String messages[] = (String[]) request.getAttribute("messages");
// String messageDates[] = (String[]) request.getAttribute("messageDates");
// String messagefroms[] = (String[]) request.getAttribute("messageFrom");
System.out.println("Msg : "+messages.length);
request.setAttribute("messages", messages);
request.setAttribute("messageDates", messageDates);
request.setAttribute("messageFrom", messageFrom);
RequestDispatcher rd = request.getRequestDispatcher("amz_4_baf/setLimitmoneyfordeps.jsp") ;
System.out.println("go to jsp");
rd.forward(request,response);
}
private String getDepNameById(String depId) {
Department_DAO dao = new Department_DAO();
dao.beginTransaction();
List<Department> dep = dao.queryWhereSQL("dep_id='" + depId + "'");
dao.commit();
if (dep.size() == 1)
return dep.get(0).getDep_name();
return null;
// return depId;
}
}