怎么修改<form:select path="name" items="${name}">中的值
<form:select path="name" items="${name}"></form:select>

这个多选框,想通过js给为这个下拉选框设置值,该怎么做

1个回答

$("#name").val(设置的值);
应该是这样吧

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ajax提交表单数据到后台失效问题怎么解决?
``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base href="<%=basePath%>"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>添加部门</title> <script type="text/javascript"> function submitJson(formID, urlPath, message) { alert(1); $.ajax({ url : urlPath, type : "post", data: $('#' + formID).serializeArray(), contentType : "application/x-www-form-urlencoded", success : function(data){ alert(message); window.location.href="http://localhost:8080/admin" + data; }, error : function() { alert("处理异常!"); } }); }</script> </head> <body> <form:form modelAttribute="department" id="form1" method="post" > <fieldset> <legend>添加部门</legend> <p> <label>部门名:</label> <form:input path="dname" name = "dname" id="dname"/> </p> <p> <label>电话:</label> <form:input path="dtel" name = "dtel" id = "dtel"/> </p> <p> <label>描述:</label> <form:textarea path="describe" rows="5"/> </p> <p> <label>上级部门:</label> <form:select path="superdepartment"> <option value="0"/>请选择上级部门 <form:options items="${superdepartment }" itemLabel="dname" itemValue="id"/> </form:select> </p> <p id="buttons"> <input id="reset" type="reset"> <input id="submit" type="button" onclick="submitJson('form1','depart/addDepart', '添加成功!')" value="添加"> </p> </fieldset> </form:form> </body> </html> ``` 上面那个弹窗1是测试用的能显示,ajax这个方法进不去为什么?
请教一下这个前端JSP页面数据校正的时候点提交没反应是什么问题
``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base href="<%=basePath%>"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>添加部门</title> <script> function check(formID){ var dp = $('#' + formID).val(); if(dp.dname=="" || dp.dname == null){ alert("部门名称不能为空!"); return false; } if(dp.dtel==""|| dp.del == null){ alert("电话不能为空!"); return false; } } </script> </head> <body> <form:form modelAttribute="department" id="formID" method="post"> <fieldset> <legend>添加部门</legend> <p> <label>部门名:</label> <form:input path="dname" name = "dname" id="dname"/> </p> <p> <label>电话:</label> <form:input path="dtel" name = "dtel" id = "dtel"/> </p> <p> <label>描述:</label> <form:textarea path="describe" rows="5"/> </p> <p> <label>上级部门:</label> <form:select path="superdepartment"> <option value="0"/>请选择上级部门 <form:options items="${superdepartment }" itemLabel="dname" itemValue="id"/> </form:select> </p> <p id="buttons"> <input id="reset" type="reset"> <input type="submit" value="提交" onclick="return check(formID)"> </p> </fieldset> </form:form> </body> </html> ```
springMVC 数据验证问题
我用ajax做了一个城市区域的下拉联动 来记录某个人的地址信息 在保存提交时报错 Failed to load resource: the server responded with a status of 400 (Bad Request) 和 HV000030: No validator could be found for type: 提交还没到controller 的save 就报错了 用户实体 同时关联三个实体地址 ``` public class TOwner { private String ownerid; private TGarden tgarden; private TArea tarea; private TCity tcity; private String ownername; ..get/set ``` controller ``` @RequestMapping(value = "save") @ResponseBody public String save(TOwner tOwner, Model model, RedirectAttributes redirectAttributes) { if (!beanValidator(model, tOwner)){ return form(tOwner, model); } System.out.println("tOwner:"+tOwner.getOwnerid()); System.out.println("TCity:"+tOwner.getTcity().getCityid()); System.out.println("TArea:"+tOwner.getTarea().getAreaid()); System.out.println("TGarden:"+tOwner.getTgarden().getGardenid()); tOwnerService.save(tOwner); addMessage(redirectAttributes, "保存住户成功"); return "redirect:"+Global.getAdminPath()+"/combox/tOwner/?repage"; } ``` 提交表单 ``` <div class="control-group"> <label class="control-label">tarea:</label> <div class="controls"> <form:select path="tarea.areaid" class="input-xlarge " id="area" onchange="loadGarden()" name="address"> <form:option value="${tOwner.tarea.areaid}" label="请选择">${tOwner.tarea.areaname}</form:option> </form:select> </div> </div> <div class="control-group"> <label class="control-label">tcity:</label> <div class="controls"> <form:select path="tcity.cityid" class="input-xlarge " id="city" onchange="loadArea()" name="address"> <form:option value="${tOwner.tcity.cityid }" label="请选择">${tOwner.tcity.cityname}</form:option> <c:forEach items="${cities }" var="cityList"> <form:option value="${cityList.cityid}">${cityList.cityname }</form:option> </c:forEach> </form:select> </div> </div> <div class="control-group"> <label class="control-label">ownername:</label> <div class="controls"> <form:input path="ownername" htmlEscape="false" maxlength="20" class="input-xlarge " id="ownername"/> </div> </div> ``` 这个是修改页面 不知道这样写对不对 我也不知道行不行 反正是可以取到数据 新人求教 在此多谢了
Spring form 如何绑定对象属性?
在使用spring 的 form 表单的时候,不知道如何绑定一个对象的属性。 如下: Teacher 类 @Entity @Table(name = "la_TEACHER") public class Teacher extends IdEntity { private String name; // 老师的课程 private Set<Lesson> lessons; @OneToMany(mappedBy = "teacher", cascade = CascadeType.ALL) public Set<Lesson> getLessons() { return lessons; } public void setLessons(Set<Lesson> lessons) { this.lessons = lessons; } } Lesson 类 @Entity @Table(name = "LA_LESSON") public class Lesson extends IdEntity { //课题 private String name; //老师 private Teacher teacher; public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToOne(targetEntity = Teacher.class) @JoinColumn(name = "teacher",nullable = false) public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } } 在lesson 的表单中, 使用select 来选择课程的教师,如下 <form:select path="teacher"> <form:option value="" label="请选择..."/> <form:options items="${teachers}" itemLabel="name" itemValue="id"/> </form:select> 总是返回到 400 错误页面去了,没有其他的错误属性。 请熟悉spring from 的朋友帮忙看看怎么解决!谢谢!
我如下遍历之后添加一级菜单没事,但是添加二级的时候菜单的值就是未定义,可以成功添加到数据库,求大神指教
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <link rel="stylesheet" type="text/css" href="css/shopbs/catalogDesign.css"> <div class="addDirectory-content"> <div class="addDirectory" id="addDirectoryNavigation"> <div class="addDirectoryLeft"> <label id="labels">添加菜单<img src="img/order/jia (2).png" /></label> </div> <div class=addDirectoryRight> <button type="button" onclick="addShopmenus()">保存</button> </div> </div> <div class="addMenu"> <c:forEach items="${shopmenulist }" var="navigations"> <div class="aNavigationBar aNavigationBar-list"> <ul class="clearfix navigationOne"> <li class="oneType">一级菜单</li> <li>名称&nbsp:&nbsp<span>${navigations.name }</span></li> <li>序号&nbsp:&nbsp<span>${navigations.sort }</span></li> <li>类型&nbsp:&nbsp<span>${navigations.type }</span></li> <li><form id="shopmenus_id" method="post"> <label for="select"> </label> <select name="select">操作 <option value="1">修改</option> </select> <input type="text" id="shopmenu_name" name="name" value="${navigations.name}"> <input type="text" id="shopmenu_sort" name="sort" value="${navigations.sort}"> <input type="text" id="shopmenu_type" name="type" value="${navigations.type}"> <input type="hidden" id="shopmenu_id" name="id" value="${navigations.id}"> <input type="button" value="保存" onclick="updatemenus_first()"> </form></li> <li class="addNavigation"><img src="img/order/jia (2).png" title="添加二级菜单" onclick="getId('${navigations.id}');" /></li> </ul> <div class="navigationTwo"> <c:forEach items="${navigations.submenus }" var="list"> <ul class="clearfix"> <li class="oneType">二级菜单</li> <li>名称&nbsp:&nbsp<span>${list.name }</span></li> <li>序号&nbsp:&nbsp<span>${list.sort }</span></li> <li>类型&nbsp:&nbsp<span>${list.type }</span></li> <li> <form id="secondsmenus" method="post"> <label for="select"> </label> <select name="select">操作 <option value="1">修改</option> </select> <input type="text" id="list_name" name="name" value="${list.name }"> <input type="text" id="list_sort" name="sort" value="${list.sort }"> <input type="text" id="list_type" name="type" value="${list.type }"> <input type="hidden" id="list_id" name="name" value="${list.id }"> <input type="button" value="保存" onclick="updatemenus_second()"> </form> </li> <li class="addNavigation"> <!-- <img src="img/order/jia (2).png" /> --> </li> </ul> </c:forEach> <ul class="clearfix addnavigationTwo"> <li class="oneType">二级菜单</li> <li>名称&nbsp:&nbsp<input id="shopname" name="name" /></li> <li>序号&nbsp:&nbsp<input id="${navigations.id }" name="sort" /></li> <li>类型&nbsp:&nbsp<input id="shoptype" name="type" value="0" /></li> <li> <form name="form1" method="post"> <label for="select"> </label> <select name="select"> <option value="1">操作</option> <option value="2">删除</option> <option value="3">修改</option> </select> </form> </li> <li class="addNavigation"> <!-- <img src="img/order/jia (2).png" /> --> </li> </ul> </div> </div> </c:forEach> </div> <div class="aNavigationBar" id="addAbusinessCategory"> <ul class="clearfix"> <li class="oneType">一级菜单</li> <li>名称&nbsp:&nbsp<input id="first_names" name="name" /></li> <li>序号&nbsp:&nbsp<input id="first_sorts" name="sort" /></li> <li>类型&nbsp:&nbsp<input id="first_types" name="type" value="0" /></li> <li> <form name="form1" method="post"> <label for="select"> </label> <select name="select"> <option value="1">操作</option> <option value="2">删除</option> <option value="3">修改</option> </select> </form> </li> <li class="addNavigation"><img src="img/order/jia (2).png" /></li> </ul> </div> <input type="hidden" id="shopmenu_shopId"> </div> <script type="text/javascript"> $("#addDirectoryNavigation").mouseover(function() { $("#addDirectoryLeft .addDirectoryLeft").show(); }).mouseleave(function() { $("#addDirectoryLeft .addDirectoryLeft").hide(); }) $("#addDirectoryNavigation .addDirectoryLeft label").click(function() { $(".aNavigationBar").show(); }); $(" .addNavigation img").click(function() { $("#twoTypesOfBusinesses").show(); }); $(function() { $(".aNavigationBar").on( "click", ".addNavigation", function() { $(this).parents(".aNavigationBar") .find(".addnavigationTwo").show(); }); }); function getId(id, index) { $("#shopmenu_shopId").val(id); } function addShopmenus() { var parinfo = $("#shopmenu_shopId").val(); $("#shopmenu_shopId").val(""); if (parinfo == "" || parinfo == null) { $.ajax({ type : "POST", url : "merchantcenter/addcatalogDesign", data : { name : $("#first_names").val(), sort : $("#first_sorts").val(), type : $("#first_types").val(), }, success : function(result) { if (result.status == 1) { alertMsg.correct("添加一级菜单成功"); $("#navigationDesign").click(); } else { alertMsg.error("非法操作"); } } }); } else { $.ajax({ type : "POST", url : "merchantcenter/addsubshopmenu", data : { name : $("#shopname").val(), sort : $("#" + parinfo + "").val(), parentId : parinfo, type : $("#shoptype").val(), }, success : function(result) { if (result.status == 1) { alertMsg.correct("添加二级菜单成功"); $("#navigationDesign").click(); } else { alertMsg.error("非法操作"); } } }); } } function updatemenus_first() { $.ajax({ type : "POST", url : "merchantcenter/updateShopmenus", data : { id : $("#shopmenu_id").val(), name : $("#shopmenu_name").val(), sort : $("#shopmenu_sort").val(), type : $("#shopmeun_type").val(), }, success : function(result) { if (result.status == 1) { alertMsg.correct("更新一级菜单成功"); $("#navigationDesign").click(); } else { alertMsg.error("更新失败"); } } }); } function updatemenus_second() { $.ajax({ type : "POST", url : "merchantcenter/updateShopmenus", data : { id : $("#list_id").val(), name : $("#list_name").val(), sort : $("#list_sort").val(), type : $("#list_type").val(), }, success : function(result) { if (result.status == 1) { alertMsg.correct("更新二级菜单成功"); $("#navigationDesign").click(); } else { alertMsg.error("更新失败"); } } }); } </script> 这是前台遍历与添加菜单的代码 /** * 跳转目录设计 */ @RequestMapping(value = "/tocatalogDesign") public ModelAndView tocatalogDesign(HttpServletRequest request) { Map<String, Object> result = new HashMap<String, Object>(); Shop shop = (Shop)request.getSession().getAttribute("shop"); List<Shopmenu>shopmenulist = shopmenuService.queryBySqlQuery("from Shopmenu sm where sm.parentId is null and sm.type=0 and sm.shop.id=?", new Object[]{shop.getId()}); result.put("shopmenulist", shopmenulist); return new ModelAndView("shopbs/order/catalogDesign",result); } /** * 目录设计 一级菜单 */ @RequestMapping(value="/addcatalogDesign",method = RequestMethod.POST) @ResponseBody public Map<String, Object> addcatalogDesign (HttpServletRequest request,Shopmenu shopmenu){ System.out.println("进入非法"); Map<String, Object>result = new HashMap<String,Object>(); Shop shop = (Shop)request.getSession().getAttribute("shop"); String warnInfo = ""; int status = 0; if(Common.isNull(shopmenu.getParentId())){ shopmenu.setShop(shop); shopmenu.setType(0); shopmenuService.save(shopmenu); warnInfo = "添加一级菜单成功"; status = 1; } result.put("warnInfo", warnInfo); result.put("status", status); return result; } /** * 目录设计 二级菜单 */ @RequestMapping(value="/addsubshopmenu",method = RequestMethod.POST) @ResponseBody public Map<String, Object> addsubshopmenu(HttpServletRequest request,Shopmenu shopmenu){ System.out.println("进入合法"); Map<String, Object>result = new HashMap<String,Object>(); Shop shop = (Shop)request.getSession().getAttribute("shop"); String warnInfo = ""; int status = 0; if(!Common.isNull(shopmenu.getParentId())){ shopmenu.setShop(shop); shopmenu.setType(0); shopmenuService.save(shopmenu); warnInfo = "添加二级菜单成功"; status = 1; }else{ warnInfo = "非法操作"; } result.put("warnInfo", warnInfo); result.put("status", status); return result; } 这是后台查询及添加菜单代码
请教各位大虾 表单怎么提交不上
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href='<c:url value="/css/add.css"/>'> <script type="text/javascript" src='<c:url value="/js/jquery.js"/>'></script> <script type="text/javascript" src='<c:url value="/static/js/page.js"/>'></script> <script language="javascript" type="text/javascript" src='<c:url value="/static/My97DatePicker/WdatePicker.js"/>'></script> <script type="text/javascript"> function selectMember(url,name,width,height) { var name = "选择客户"; var iWidth = 1000; //弹出窗口的宽度; var iHeight = 720; //弹出窗口的高度; var iTop = (window.screen.availHeight-30-iHeight)/2; //获得窗口的垂直位置; var iLeft = (window.screen.availWidth-10-iWidth)/2; //获得窗口的水平位置; window.open(url,name,'height='+iHeight+',,innerHeight='+iHeight+',width='+iWidth+',innerWidth='+iWidth+',top='+iTop+',left='+iLeft+',toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no'); } </script> </head> <body> <div class="bd"> <img style="float: left;" src='<c:url value="/image/l_bgk.jpg"/>' /> <div class="bd_r"> <div class="title"> <ul> <li>发卡</li> </ul> </div> <div style="clear: both;"></div> <form action="<c:url value="/cardActive/active"/>" method="post" name="cardForm"> <table class="add add1"> <tr> <td align="right">卡号:</td> <td> <input type="text" name="cardNum" id="cardNum" size="18" value="${card.cardNum}"/> </td> <td style="text-align: left;color: red;"> &nbsp;*<form:errors path="card.cardNum" />${msg } <span id="tip_cardNum" style="display: none;">&nbsp;请输入卡号</span> </td> </tr> <tr> <td align="right">选择卡的类型</td> <td> <select name="cardType" id="cardType" style="width:140px;" onchange="getvalue()"> <option value = "" selected="selected">请选择</option> <option value = "1" >红卡</option> <option value = "2" >绿卡</option> </select> </td> </tr> <tr> <td align="right">开卡金额:</td> <td><input type="hidden" name="openAmount" id="openAmount" size="18" /> <input type="text" style="display: inline;" name="a" id="a" size="18" value="" /> <select name="b" style="display: none;" id="b" style="width:140px;"> <option value="">请选择</option> <option value="4999">4999</option> <option value="10000">10000</option> </select> </td> <td style="text-align: left;color: red;"> &nbsp;*<form:errors path="card.openAmount"/> <span id="tip_openAmount" style="display: none;">&nbsp;请选择开卡金额</span> </td> </tr> <tr> <td align="right">选择客户经理:</td> <td><select name="custommerManager.id" id="custommerManager.id" style="width: 140px;" > <option value="">请选择</option> <c:forEach var="user" items="${userResult.list }"> <option value="${user.id }" <c:if test="${card.custommerManager.id == user.id }">selected="selected"</c:if>>${user.fullName }</option> </c:forEach> </select> </td> <td style="text-align: left;color: red;"> &nbsp;*<form:errors path="card.custommerManager.id"/> <span id="tip_custommerManager.id" style="display: none;">&nbsp;请选择客户经理</span> </td> </tr> <!-- tr> <td align="right">激活日期:</td> <td><input type="text" name="createDt" id = "createDt" value="${createDate }" class="Wdate" onclick="WdatePicker()" readonly="readonly" size="18" /></td> </tr--> <tr> <td align="right">失效日期:</td> <td> <input type="text" name="endDate" id="endDate" value="" class="Wdate" onclick="WdatePicker()" readonly="readonly" size="18"/> </td> </tr> <tr> <td align="right">选择客户(非必选):</td> <td> <input type="hidden" name="member.id" id="memeber.id"/> <input type="text" size="18" name="member.name" id="member.name" disabled="disabled"/> </td> <td align="right"> &nbsp;&nbsp;<a href="javascript:void(0);" onclick='selectMember("<c:url value="/memberselect"/>")'>选择客户</a> </td> </tr> <tr> <td></td> <td class="btn"> <input type="button" value="提交" onclick="sub();"/> </td> </tr> </table> </form> </div> </div> <script type="text/javascript"> function getvalue(){ var cardType = document.getElementById("cardType").value; document.getElementById("openAmount").value=""; document.getElementById("tip_openAmount").innerHTML = ""; if(cardType == 1){ document.getElementById("a").style.display="inline"; document.getElementById("b").style.display="none"; }else{ document.getElementById("b").style.display="inline"; document.getElementById("a").style.display="none"; } } function sub(){ if(isEmptyById("cardNum")){ show("tip_cardNum"); return; }else{ hide("tip_cardNum"); } if(document.getElementById("custommerManager.id").value == ""){ show("tip_custommerManagerId"); return; }else{ hide("tip_custommerManagerId"); } var cardType = document.getElementById("cardType").value; var a = document.getElementById("a").value; var b = document.getElementById("b").value; if(cardType==1){ document.getElementById("openAmount").value=a; } if(cardType==2){ document.getElementById("openAmount").value=b; } var openAmount = document.getElementById("openAmount").value; //alert(openAmount); if(openAmount==""){ document.getElementById("tip_openAmount").innerHTML =""; document.getElementById("tip_openAmount").innerHTML ="请输入金额"; document.getElementById("tip_openAmount").style.display="inline"; return; }else{ document.getElementById("tip_openAmount").style.display="none"; } if(cardType==1){ if(openAmount==1000||openAmount%1000==0 ||openAmount!=0){ document.getElementById("tip_openAmount").style.display="none"; }else{ document.getElementById("tip_openAmount").innerHTML =""; document.getElementById("tip_openAmount").innerHTML ="红卡用户金额为1000或1000倍数"; document.getElementById("tip_openAmount").style.display="inline"; return; } } if(confirm("尊敬的用户,您是否确认激活该卡?")){ document.forms[0].submit(); } } </script> </body> </html> 这是我的代码 如果<td align="right">选择客户经理:</td> <td><select name="custommerManager.id" id="custommerManager.id" style="width: 140px;" > <option value="">请选择</option> 这里面的value为""的时候 表单提交不上 如果value有值得话 就可以提交 这是为什么 怎么该呢
请教各位大虾 表单提交的问题
我的jsp页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href='<c:url value="/css/add.css"/>'> <script type="text/javascript" src='<c:url value="/js/jquery.js"/>'></script> <script type="text/javascript" src='<c:url value="/static/js/page.js"/>'></script> <script language="javascript" type="text/javascript" src='<c:url value="/static/My97DatePicker/WdatePicker.js"/>'></script> <script type="text/javascript"> function selectMember(url,name,width,height) { var name = "选择客户"; var iWidth = 1000; //弹出窗口的宽度; var iHeight = 720; //弹出窗口的高度; var iTop = (window.screen.availHeight-30-iHeight)/2; //获得窗口的垂直位置; var iLeft = (window.screen.availWidth-10-iWidth)/2; //获得窗口的水平位置; window.open(url,name,'height='+iHeight+',,innerHeight='+iHeight+',width='+iWidth+',innerWidth='+iWidth+',top='+iTop+',left='+iLeft+',toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no'); } </script> </head> <body> <div class="bd"> <img style="float: left;" src='<c:url value="/image/l_bgk.jpg"/>' /> <div class="bd_r"> <div class="title"> <ul> <li>发卡</li> </ul> </div> <div style="clear: both;"></div> <form action="<c:url value="/cardActive/active"/>" method="post" name="cardForm"> <table class="add add1"> <tr> <td align="right">卡号:</td> <td> <input type="text" name="cardNum" id="cardNum" size="18" value="${card.cardNum}"/> </td> <td style="text-align: left;color: red;"> &nbsp;*<form:errors path="card.cardNum" />${msg } <span id="tip_cardNum" style="display: none;">&nbsp;请输入卡号</span> </td> </tr> <tr> <td align="right">选择卡的类型</td> <td> <select name="cardType" id="cardType" style="width:140px;" onchange="getvalue()"> <option value = "" selected="selected">请选择</option> <option value = "1" >红卡</option> <option value = "2" >绿卡</option> </select> </td> </tr> <tr> <td align="right">开卡金额:</td> <td><input type="hidden" name="openAmount" id="openAmount" size="18" /> <input type="text" style="display: inline;" name="a" id="a" size="18" value="" /> <select name="b" style="display: none;" id="b" style="width:140px;"> <option value="">--</option> <option value="4999">4999</option> <option value="10000">10000</option> </select> </td> <td style="text-align: left;color: red;"> &nbsp;*<form:errors path="card.openAmount"/> <span id="tip_openAmount" style="display: none;">&nbsp;请选择开卡金额</span> </td> </tr> <tr> <td align="right">选择客户经理:</td> <td><select name="custommerManager.id" id="custommerManager.id" style="width: 140px;" > <option value="161">--</option> <c:forEach var="user" items="${userResult.list }"> <option value="${user.id }" <c:if test="${card.custommerManager.id == user.id }">selected="selected"</c:if>>${user.fullName }</option> </c:forEach> </select> </td> <td style="text-align: left;color: red;"> &nbsp;*<form:errors path="card.custommerManager.id"/> <span id="tip_custommerManager.id" style="display: none;">&nbsp;请选择客户经理</span> </td> </tr> <!-- tr> <td align="right">激活日期:</td> <td><input type="text" name="createDt" id = "createDt" value="${createDate }" class="Wdate" onclick="WdatePicker()" readonly="readonly" size="18" /></td> </tr--> <tr> <td align="right">失效日期:</td> <td><input type="text" name="endDt" id="endDt" value="${card.endDt}" class="Wdate" onclick="WdatePicker()" readonly="readonly" size="18" /></td> </tr> <tr> <td align="right">选择客户(非必选):</td> <td> <input type="hidden" name="member.id" id="memeber.id"/> <input type="text" size="18" name="member.name" id="member.name" disabled="disabled"/> </td> <td align="right"> &nbsp;&nbsp;<a href="javascript:void(0);" onclick='selectMember("<c:url value="/memberselect"/>")'>选择客户</a> </td> </tr> <tr> <td></td> <td class="btn"> <input type="button" value="提交" onclick="sub();"/> </td> </tr> </table> </form> </div> </div> <script type="text/javascript"> function getvalue(){ var cardType = document.getElementById("cardType").value; document.getElementById("openAmount").value=""; document.getElementById("tip_openAmount").innerHTML = ""; if(cardType == 1){ document.getElementById("a").style.display="inline"; document.getElementById("b").style.display="none"; }else{ document.getElementById("b").style.display="inline"; document.getElementById("a").style.display="none"; } } function sub(){ if(isEmptyById("cardNum")){ show("tip_cardNum"); return; }else{ hide("tip_cardNum"); } if(document.getElementById("custommerManager.id").value == ""){ show("tip_custommerManagerId"); return; }else{ hide("tip_custommerManagerId"); } var cardType = document.getElementById("cardType").value; var a = document.getElementById("a").value; var b = document.getElementById("b").value; if(cardType==1){ document.getElementById("openAmount").value=a; } if(cardType==2){ document.getElementById("openAmount").value=b; } var openAmount = document.getElementById("openAmount").value; //alert(openAmount); if(openAmount==""){ document.getElementById("tip_openAmount").innerHTML =""; document.getElementById("tip_openAmount").innerHTML ="请输入金额"; document.getElementById("tip_openAmount").style.display="inline"; return; }else{ document.getElementById("tip_openAmount").style.display="none"; } if(cardType==1){ if(openAmount==1000||openAmount%1000==0 ||openAmount!=0){ document.getElementById("tip_openAmount").style.display="none"; }else{ document.getElementById("tip_openAmount").innerHTML =""; document.getElementById("tip_openAmount").innerHTML ="红卡用户金额为1000或1000倍数"; document.getElementById("tip_openAmount").style.display="inline"; return; } } if(confirm("尊敬的用户,您是否确认激活该卡?")){ document.forms[0].submit(); } } </script> </body> </html> 我提交后 没有反应
form表单多行提交,往数据库添加
![图片说明](https://img-ask.csdn.net/upload/201701/10/1484038087_349126.png) 单击保存,往数据库里多行添加,怎么做,小白, 请大神指教 ``` ``` <%@ page contentType="text/html;charset=UTF-8" %> <%@ include file="/WEB-INF/views/include/taglib.jsp"%> <html> <head> <title>订单管理</title> <meta name="decorator" content="default"/> <script type="text/javascript"> $(document).ready(function() { var a=0; $("#add").click(function(){ var i=a++; $("#tbody select").children().next().remove(); $("#tbody").append("<tr>"+"<td><input name=\"breedid\" maxlength=\"18\" htmlEscape=\"false\"class=\"input-xlarge\" /></td>"+ "<td><select id=\"select\" name=\"breednamess\" ><option>请选择</option></select></td>"+ "<td><input name=\"standard\" maxlength=\"64\" htmlEscape=\"false\"class=\"input-xlarge\"/></td>"+ "<td><input name=\"count\"></td>"+"<td><input name=\"price\"></td>"+ "<td><input name=\"total\" maxlength=\"64\" htmlEscape=\"false\"class=\"input-xlarge\"/></td>"+ "<td><input type=\"button\" value=\"删除\" id=\"delete1\" ></td>"+ "</tr>"); var supperliername=$("#sel").val(); //alert("行数:"+$("tbody td").parent().index()); var uri="http://localhost:8181/jeesite/a/number/demoNumber/getbreed?suppliernames="+supperliername; $.getJSON(uri,function(json){ alert(json.length); for(var i=0;i<=json.length;i++){ //alert(json[i].breedname); //$("#select").append("<option value='"json[i].breedname"' >"+json[i].breedname+"</option>"); if(i==i){ $("#tbody select").append("<option value='"+json[i].breedname+"'>"+json[i].breedname+"</option>"); } } }); }); $("#sel").click(function(){ //alert(); $("#select").empty(); var supperliername=$("#sel").val(); //alert(supperliername); var uri="http://localhost:8181/jeesite/a/number/demoNumber/getbreed?suppliernames="+supperliername; $.getJSON(uri,function(json){ //alert(json.length); for(var i=0;i<=json.length;i++){ //alert(json[i].breedname); //$("#select").append("<option value='"json[i].breedname"' >"+json[i].breedname+"</option>"); $("#select").append("<option value='"+json[i].breedname+"'>"+json[i].breedname+"</option>"); } }); }); $("#delete1").live("click",function(){ alert(); $("#tbody tr").remove(); }); //$("#name").focus(); $("#inputForm").validate({ submitHandler: function(form){ loading('正在提交,请稍等...'); form.submit(); }, errorContainer: "#messageBox", errorPlacement: function(error, element) { $("#messageBox").text("输入有误,请先更正。"); if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){ error.appendTo(element.parent().parent()); } else { error.insertAfter(element); } } }); }); </script> </head> <body> <ul class="nav nav-tabs"> <li><a href="${ctx}/number/demoNumber/">订单列表</a></li> <li class="active"><a href="${ctx}/number/demoNumber/form?id=${demoNumber.id}">订单<shiro:hasPermission name="number:demoNumber:edit">${not empty demoNumber.id?'修改':'添加'}</shiro:hasPermission><shiro:lacksPermission name="number:demoNumber:edit">查看</shiro:lacksPermission></a></li> </ul><br/> <form id="inputForm" modelAttribute="demoNumber" action="${ctx}/number/demoNumber/save" method="post" class="form-horizontal"> <%-- <form:hidden path="id"/> --%> <sys:message content="${message}"/> <div> <td> <label >制单部门:</label> <input type="text"> <label >采购员:</label> <input type="text"><br><br> <label >供货商名称:</label> <select id="sel" style="width: 200px" name="suppliernamess" > <option>请选择</option> <c:forEach items="${list1}" var="list1"> <option value="${list1.suppliername}" >${list1.suppliername}</option> </c:forEach> </select> </div> <div><input type="button" value="添加" id="add">&nbsp;<input type="button" value="删除" id="delete" > </div> <table id="contentTable" class="table table-striped table-bordered table-condensed"> <thead> <tr> <th style="max-width: 50px;max-height: 50px" >产品编号</th> <th>品种名称</th> <th>规格型号</th> <th>数量</th> <th>单价</th> <th>总金额</th> <shiro:hasPermission name="number:demoNumber:edit"><th>操作</th></shiro:hasPermission> </tr> </thead> <tbody id="tbody" > </tbody> </table> <div class="form-actions"> <shiro:hasPermission name="number:demoNumber:edit"><input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;</shiro:hasPermission> <input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/> </div> </form> </body> </html>
ssh分页问题
action定义如下: [code="java"] public class CRMGuestAction extends DispatchAction { private CRMDao crmDao; public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { DynaValidatorForm f = (DynaValidatorForm) form; JzGuestbook guestbook = new JzGuestbook(); guestbook.setCpcode(cpcode); guestbook.setAddress(address); guestbook.setContel(contel); guestbook.setContect(contect); guestbook.setTel(tel); guestbook.setRegisternumber(registernumber); List all = null; int currentPage = 1; int lineSize = 3; int allRecorders = 0; try { currentPage = Integer.parseInt(request.getParameter("cp")); } catch (Exception e) { } try { crmDao.addGuestbook(guestbook); allRecorders = crmDao.getGuestbookTotal(); all = crmDao.getAllGuestbook(currentPage, lineSize); } catch (Exception e) { e.printStackTrace(); } request.setAttribute("currentPage", currentPage); request.setAttribute("lineSize", lineSize); request.setAttribute("allRecorders", allRecorders); request.setAttribute("jspUrl", "cRMGuest.do"); request.setAttribute("all", all); return mapping.findForward("indexguest"); } public ActionForward selectall(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { System.out.println("here"); List all = null; int currentPage = 1; int lineSize = 3; int allRecorders = 0; try { System.out.println(request.getParameter("cp")); currentPage = Integer.parseInt(request.getParameter("cp")); } catch (Exception e) { e.printStackTrace(); } try { allRecorders = crmDao.getGuestbookTotal(); all = crmDao.getAllGuestbook(currentPage, lineSize); } catch (Exception e) { e.printStackTrace(); } request.setAttribute("currentPage", currentPage); request.setAttribute("lineSize", lineSize); request.setAttribute("allRecorders", allRecorders); request.setAttribute("jspUrl", "cRMGuest.do"); request.setAttribute("all", all); return mapping.findForward("indexguest"); } public void setCrmDao(CRMDao crmDao) { this.crmDao = crmDao; } } [/code] 这页是jsp页面如下: [code="java"] <body> <html:javascript formName="cRMGuestForm" /> [color=red]<html:form method="post" action="/cRMGuest.do?method=save"//保存信息[/color] onsubmit="return validateCRMGuestForm(this)"> <p> 客户名称: <label> <html:text property="cpname"></html:text> </label> </p> <p> 联系人: <label> <html:text property="contect"></html:text> </label> </p> <p> 联系电话: <label> <html:text property="contel"></html:text> </label> </p> <p> 地址: <label> <html:text property="address"></html:text> </label> </p> <p> <label> <input type="reset" name="Submit" value="重置" /> </label> <label> <input type="submit" name="Submit2" value="新增记录" /> </label> </p> </html:form> <table border="0" width="100%"> <tr> <td> 联系人 </td> <td> 联系电话 </td> </tr> <c:forEach items="${requestScope['all']}" var="user"> <tr> <td> <c:out value="${user.contect}"></c:out> </td> <td> <c:out value="${user.contel}"></c:out> </td> </tr> </c:forEach> </table> <jsp:include page [color=red]="/split_page.jsp">[/color] <jsp:param name="lineSize" value="${lineSize}" /> <jsp:param name="jspUrl" value="${jspUrl}" /> <jsp:param name="allRecorders" value="${allRecorders}" /> <jsp:param name="currentPage" value="${currentPage}" /> <jsp:param name="searchFlag" value="F" /> </jsp:include> </body> [/code] split_page.jsp为: [code="java"] <%@ page contentType="text/html;charset=utf-8"%> <% String jspUrl = null ; int lineSize = 10 ; int currentPage = 1 ; int pageSize = 0 ; int allRecorders = 0; String keyWord = null ; String searchFlag = "F" ; %> <% jspUrl = request.getParameter("jspUrl") ; keyWord = request.getParameter("keyWord") ; searchFlag = request.getParameter("searchFlag") ; try { [color=red]lineSize = Integer.parseInt(request.getParameter("lineSize")) ; currentPage = Integer.parseInt(request.getParameter("currentPage")) ; allRecorders = Integer.parseInt(request.getParameter("allRecorders")) ;//会产生java.lang.NumberFormatException: For input string: "" [/color] } catch(Exception e) { // } %> <% pageSize = (allRecorders+lineSize-1)/lineSize ; %> <script language="javaScript"> function openPage(curpage) { document.spage.cp.value = curpage ; document.spage.submit() ; } function selOpenPage() { document.spage.cp.value = document.spage.selpage.value ; document.spage.submit() ; } function change() { if(document.spage.kw.value!="") { document.spage.status.value = "selectlike" ; } } </script> [color=red]<form name="spage" action="<%=jspUrl%>"> <input type="hidden" name="method" value="<%="T".equals(searchFlag)?"selectlike":"selectall"%>">/*产生url地址*/[/color]<% if("T".equals(searchFlag)) { %> 输入查询关键字:<input type="text" name="kw" value="<%=keyWord.equals("null")?"":keyWord%>"> <input type="submit" value="查询"> <br> <br> <% } %> <% if(allRecorders>0) { %> <input type="button" value="首页" onClick="openPage(1)" <%=currentPage==1?"disabled":""%>> <input type="button" value="上一页" onClick="openPage(<%=currentPage-1%>)" <%=currentPage==1?"disabled":""%>> <input type="button" value="下一页" onClick="openPage(<%=currentPage+1%>)" <%=currentPage==pageSize?"disabled":""%>> <input type="button" value="尾页" onClick="openPage(<%=pageSize%>)" <%=currentPage==pageSize?"disabled":""%>> <input type="hidden" name="cp" value=""> <font color="red" size="5"><%=currentPage%></font> / <font color="red" size="5"><%=pageSize%></font> 跳转到 <select name="selpage" onChange="selOpenPage()"> <% for(int x=1;x<=pageSize;x++) { %> <option value="<%=x%>" <%=currentPage==x?"selected":""%>><%=x%></option> <% } %> </select> 页 <% } %> </form> [/code] struts-config.xml的配置信息如下: [code="java"] <action attribute="cRMGuestForm" input="/crm/cRMGuest.jsp" name="cRMGuestForm" parameter="method" path="/cRMGuest" scope="request" type="org.springframework.web.struts.DelegatingActionProxy" > <forward name="indexguest" path="/crm/cRMGuest.jsp"></forward> </action> </action-mappings> [/code] 现在是提交好信息时会列出第一页信息,点击下一页时,uri的地址:http://localhost:8088/Demo/cRMGuest.do?method=selectall&cp=2&selpage=1是正确的,但是第二页的信息却显示不出来,同时我在CRMGuestAction的seletall中标注了断点以及起始处写上输出标识,但是在点下一页时单步调试时并没有运行到那里就停止了,是我那个地方设置的不对? [b]问题补充:[/b] action定义如下: [code="java"] public class CRMGuestAction extends DispatchAction { private CRMDao crmDao; public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { DynaValidatorForm f = (DynaValidatorForm) form; JzGuestbook guestbook = new JzGuestbook(); guestbook.setCpcode(cpcode); guestbook.setAddress(address); guestbook.setContel(contel); guestbook.setContect(contect); guestbook.setTel(tel); guestbook.setRegisternumber(registernumber); List all = null; int currentPage = 1; int lineSize = 3; int allRecorders = 0; try { currentPage = Integer.parseInt(request.getParameter("cp")); } catch (Exception e) { } try { crmDao.addGuestbook(guestbook); allRecorders = crmDao.getGuestbookTotal(); all = crmDao.getAllGuestbook(currentPage, lineSize); } catch (Exception e) { e.printStackTrace(); } request.setAttribute("currentPage", currentPage); request.setAttribute("lineSize", lineSize); request.setAttribute("allRecorders", allRecorders); request.setAttribute("jspUrl", "cRMGuest.do"); request.setAttribute("all", all); return mapping.findForward("indexguest"); } public ActionForward selectall(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { System.out.println("here"); List all = null; int currentPage = 1; int lineSize = 3; int allRecorders = 0; try { System.out.println(request.getParameter("cp")); currentPage = Integer.parseInt(request.getParameter("cp")); } catch (Exception e) { e.printStackTrace(); } try { allRecorders = crmDao.getGuestbookTotal(); all = crmDao.getAllGuestbook(currentPage, lineSize); } catch (Exception e) { e.printStackTrace(); } request.setAttribute("currentPage", currentPage); request.setAttribute("lineSize", lineSize); request.setAttribute("allRecorders", allRecorders); request.setAttribute("jspUrl", "cRMGuest.do"); request.setAttribute("all", all); return mapping.findForward("indexguest"); } public void setCrmDao(CRMDao crmDao) { this.crmDao = crmDao; } } [/code] 这页是jsp页面如下: [code="java"] <body> <html:javascript formName="cRMGuestForm" /> [color=red]<html:form method="post" action="/cRMGuest.do?method=save"//保存信息[/color] onsubmit="return validateCRMGuestForm(this)"> <p> 客户名称: <label> <html:text property="cpname"></html:text> </label> </p> <p> 联系人: <label> <html:text property="contect"></html:text> </label> </p> <p> 联系电话: <label> <html:text property="contel"></html:text> </label> </p> <p> 地址: <label> <html:text property="address"></html:text> </label> </p> <p> <label> <input type="reset" name="Submit" value="重置" /> </label> <label> <input type="submit" name="Submit2" value="新增记录" /> </label> </p> </html:form> <table border="0" width="100%"> <tr> <td> 联系人 </td> <td> 联系电话 </td> </tr> <c:forEach items="${requestScope['all']}" var="user"> <tr> <td> <c:out value="${user.contect}"></c:out> </td> <td> <c:out value="${user.contel}"></c:out> </td> </tr> </c:forEach> </table> <jsp:include page [color=red]="/split_page.jsp">[/color] <jsp:param name="lineSize" value="${lineSize}" /> <jsp:param name="jspUrl" value="${jspUrl}" /> <jsp:param name="allRecorders" value="${allRecorders}" /> <jsp:param name="currentPage" value="${currentPage}" /> <jsp:param name="searchFlag" value="F" /> </jsp:include> </body> [/code] split_page.jsp为: [code="java"] <%@ page contentType="text/html;charset=utf-8"%> <% String jspUrl = null ; int lineSize = 10 ; int currentPage = 1 ; int pageSize = 0 ; int allRecorders = 0; String keyWord = null ; String searchFlag = "F" ; %> <% jspUrl = request.getParameter("jspUrl") ; keyWord = request.getParameter("keyWord") ; searchFlag = request.getParameter("searchFlag") ; try { [color=red]lineSize = Integer.parseInt(request.getParameter("lineSize")) ; currentPage = Integer.parseInt(request.getParameter("currentPage")) ; allRecorders = Integer.parseInt(request.getParameter("allRecorders")) ;//会产生java.lang.NumberFormatException: For input string: "" [/color] } catch(Exception e) { // } %> <% pageSize = (allRecorders+lineSize-1)/lineSize ; %> <script language="javaScript"> function openPage(curpage) { document.spage.cp.value = curpage ; document.spage.submit() ; } function selOpenPage() { document.spage.cp.value = document.spage.selpage.value ; document.spage.submit() ; } function change() { if(document.spage.kw.value!="") { document.spage.status.value = "selectlike" ; } } </script> [color=red]<form name="spage" action="<%=jspUrl%>"> <input type="hidden" name="method" value="<%="T".equals(searchFlag)?"selectlike":"selectall"%>">/*产生url地址*/[/color]<% if("T".equals(searchFlag)) { %> 输入查询关键字:<input type="text" name="kw" value="<%=keyWord.equals("null")?"":keyWord%>"> <input type="submit" value="查询"> <br> <br> <% } %> <% if(allRecorders>0) { %> <input type="button" value="首页" onClick="openPage(1)" <%=currentPage==1?"disabled":""%>> <input type="button" value="上一页" onClick="openPage(<%=currentPage-1%>)" <%=currentPage==1?"disabled":""%>> <input type="button" value="下一页" onClick="openPage(<%=currentPage+1%>)" <%=currentPage==pageSize?"disabled":""%>> <input type="button" value="尾页" onClick="openPage(<%=pageSize%>)" <%=currentPage==pageSize?"disabled":""%>> <input type="hidden" name="cp" value=""> <font color="red" size="5"><%=currentPage%></font> / <font color="red" size="5"><%=pageSize%></font> 跳转到 <select name="selpage" onChange="selOpenPage()"> <% for(int x=1;x<=pageSize;x++) { %> <option value="<%=x%>" <%=currentPage==x?"selected":""%>><%=x%></option> <% } %> </select> 页 <% } %> </form> [/code] struts-config.xml的配置信息如下: [code="java"] <action attribute="cRMGuestForm" input="/crm/cRMGuest.jsp" name="cRMGuestForm" parameter="method" path="/cRMGuest" scope="request" type="org.springframework.web.struts.DelegatingActionProxy" > <forward name="indexguest" path="/crm/cRMGuest.jsp"></forward> </action> </action-mappings> [/code] 现在是提交好信息时会列出第一页信息,点击下一页时,uri的地址:http://localhost:8088/Demo/cRMGuest.do?method=selectall&cp=2&selpage=1是正确的,但是第二页的信息却显示不出来,同时我在CRMGuestAction的seletall中标注了断点以及起始处写上输出标识,但是在点下一页时单步调试时并没有运行到那里就停止了,是我那个地方设置的不对? [color=red]<form name="spage" action="<%=jspUrl%>"> <input type="hidden" name="method" value="<%="T".equals(searchFlag)?"selectlike":"selectall"%>">[/color]这是生成的地址,地址没问题是正确的。 [b]问题补充:[/b] 查询关键字还没有涉及,这个应该不是这方面的问题。 [b]问题补充:[/b] [color=red]这个问题的关键是生成的url是正确的,但是没有去跳转到action中,是不是配置的问题?我的工程目录如下: web-root --web-inf --crm --cRMGuest.jsp --single-page.jsp[/color] [b]问题补充:[/b] [color=red]我按照您说的输入url:http://localhost:8088/Demo/cRMGuest.do?method=selectall&cp=2&selpage=1,没有显示,所以我觉得可能配置有问题,我能显示的第一个页面,因为我首先要提交一些信息后,我用的jsp中action的地址是/cRMGuest.do?method=save,然后再进入的时候,我把url换为url:http://localhost:8088/Demo/cRMGuest.do?method=selectall&cp=2&selpage=1就不保存那些提交的信息了。[/color]
vue工程中$emit()无法调用
子组件代码 ``` <template> <div> <!--查询表单--> <el-form :model="params"> 标签: <el-input v-model="params.tag" style="width:160px"></el-input> 原始名称: <el-input v-model="params.fileName" style="width:160px"></el-input> 处理状态: <el-select v-model="params.processStatus" placeholder="请选择处理状态"> <el-option v-for="item in processStatusList" :key="item.id" :label="item.name" :value="item.id"> </el-option> </el-select> <br/> <el-button type="primary" v-on:click="query" size="small">查询</el-button> <router-link class="mui-tab-item" :to="{path:'/upload'}"> <el-button type="primary" size="small" v-if="ischoose != true">上传文件</el-button> </router-link> </el-form> <!--列表--> <el-table :data="list" highlight-current-row v-loading="listLoading" style="width: 100%;"> <el-table-column type="index" width="30"> </el-table-column> <el-table-column prop="fileOriginalName" label="原始文件名称" width="220"> </el-table-column> <el-table-column prop="fileName" label="文件名称" width="220"> </el-table-column> <el-table-column prop="fileUrl" label="访问url" width="260"> </el-table-column> <el-table-column prop="tag" label="标签" width="100"> </el-table-column> <el-table-column prop="fileSize" label="文件大小" width="120"> </el-table-column> <el-table-column prop="processStatus" label="处理状态" width="100" :formatter="formatProcessStatus"> </el-table-column> <el-table-column prop="uploadTime" label="创建时间" width="110" :formatter="formatCreatetime"> </el-table-column> <el-table-column label="开始处理" width="100" v-if="ischoose == true"> <template slot-scope="scope"> <el-button size="small" type="primary" plain @click="process(scope.row.fileId)">开始处理 </el-button> </template> </el-table-column> <el-table-column label="选择" width="80" v-if="ischoose != true"> <template slot-scope="scope"> <el-button size="small" type="primary" plain @click="choose(scope.row)">选择</el-button> </template> </el-table-column> </el-table> <!--分页--> <el-col :span="24" class="toolbar"> <el-pagination background layout="prev, pager, next" @current-change="changePage" :page-size="this.params.size" :total="total" :current-page="this.params.page" style="float:right;"> </el-pagination> </el-col> </div> </template> <script> import * as mediaApi from '../api/media' import utilApi from '@/common/utils'; import * as courseApi from '../api/course' export default{ props: ['ischoose'], data(){ return { params:{ page:1,//页码 size:10,//每页显示个数 tag:'',//标签 fileName:'',//文件名称 processStatus:''//处理状态 }, listLoading:false, list:[], total:0, processStatusList:[] } }, methods:{ formatCreatetime(row, column){ var createTime = new Date(row.uploadTime); if (createTime) { return utilApi.formatDate(createTime, 'yyyy-MM-dd hh:mm:ss'); } }, formatProcessStatus(row,column){ var processStatus = row.processStatus; if (processStatus) { if(processStatus == '303001'){ return "处理中"; }else if(processStatus == '303002'){ return "处理成功"; }else if(processStatus == '303003'){ return "处理失败"; }else if(processStatus == '303004'){ return "无需处理"; } } }, choose(mediaFile){ if(mediaFile.processStatus !='303002' && mediaFile.processStatus !='303004'){ this.$message.error('该文件未处理,不允许选择'); return ; } if(!mediaFile.fileUrl){ this.$message.error('该文件的访问url为空,不允许选择'); return ; } /*let teachplanMedia ={} teachplanMedia.mediaId =mediaFile.fileId; teachplanMedia.mediaFileOriginalName =mediaFile.fileOriginalName; teachplanMedia.mediaUrl =mediaFile.fileUrl; teachplanMedia.courseId =this.courseid; //课程计划 teachplanMedia.teachplanId=this.teachplanId courseApi.savemedia(teachplanMedia).then(res=>{ if(res.success){ this.$message.success("选择视频成功") //查询课程计划 this.findTeachplan() }else{ this.$message.error(res.message) } })*/ //调用父组件的choosemedia方法 this.$emit('choosemedia',mediaFile.fileId,mediaFile.fileOriginalName,mediaFile.fileUrl); }, changePage(page){ this.params.page = page; this.query() }, process (id) { console.log(id) mediaApi.media_process(id).then((res)=>{ console.log(res) if(res.success){ this.$message.success('开始处理,请稍后查看处理结果'); }else{ this.$message.error('操作失败,请刷新页面重试'); } }) }, query(){ mediaApi.media_list(this.params.page,this.params.size,this.params).then((res)=>{ console.log(res) this.total = res.queryResult.total this.list = res.queryResult.list }) } }, created(){ //默认第一页 this.params.page = Number.parseInt(this.$route.query.page||1); }, mounted() { //默认查询页面 this.query() //初始化处理状态 this.processStatusList = [ { id:'', name:'全部' }, { id:'303001', name:'处理中' }, { id:'303002', name:'处理成功' }, { id:'303003', name:'处理失败' }, { id:'303004', name:'无需处理' } ] } } </script> <style> </style> ``` 父组件代码 ``` <template> <div> <el-button type="primary" @click="teachplayFormVisible = true">添加课程计划</el-button> <el-tree :data="teachplanList" :props="defaultProps" node-key="id" default-expand-all :expand-on-click-node="false" :render-content="renderContent"> </el-tree> <el-dialog title="添加课程计划" :visible.sync="teachplayFormVisible" > <el-form ref="teachplanForm" :model="teachplanActive" label-width="140px" style="width:600px;" :rules="teachplanRules" > <el-form-item label="上级结点" > <el-select v-model="teachplanActive.parentid" placeholder="不填表示根结点"> <el-option v-for="item in teachplanList" :key="item.id" :label="item.pname" :value="item.id"> </el-option> </el-select> </el-form-item> <el-form-item label="章节/课时名称" prop="pname"> <el-input v-model="teachplanActive.pname" auto-complete="off"></el-input> </el-form-item> <el-form-item label="课程类型" > <el-radio-group v-model="teachplanActive.ptype"> <el-radio class="radio" label='1'>视频</el-radio> <el-radio class="radio" label='2'>文档</el-radio> </el-radio-group> </el-form-item> <el-form-item label="学习时长(分钟) 请输入数字" > <el-input type="number" v-model="teachplanActive.timelength" auto-complete="off" ></el-input> </el-form-item> <el-form-item label="排序字段" > <el-input v-model="teachplanActive.orderby" auto-complete="off" ></el-input> </el-form-item> <el-form-item label="章节/课时介绍" prop="description"> <el-input type="textarea" v-model="teachplanActive.description" ></el-input> </el-form-item> <el-form-item label="状态" prop="status"> <el-radio-group v-model="teachplanActive.status" > <el-radio class="radio" label="0" >未发布</el-radio> <el-radio class="radio" label='1'>已发布</el-radio> </el-radio-group> </el-form-item> <el-form-item > <el-button type="primary" v-on:click="addTeachplan">提交</el-button> <el-button type="primary" v-on:click="resetForm">重置</el-button> </el-form-item> </el-form> </el-dialog> <el-dialog title="选择媒资文件" :visible.sync="mediaFormVisible"> <media-list v-bind:ischoose="true" @choosemedia="choosemedia"></media-list> </el-dialog> </div> </template> <script> let id = 1000; import * as courseApi from '../../api/course'; import utilApi from '../../../../common/utils'; import * as systemApi from '../../../../base/api/system'; import mediaList from '@/module/media/page/media_list.vue'; export default { components:{ mediaList }, data() { return { mediaFormVisible:false, teachplayFormVisible:false,//控制添加窗口是否显示 teachplanList : [{ id: 1, pname: '一级 1', children: [{ id: 4, pname: '二级 1-1', children: [{ id: 9, pname: '三级 1-1-1' }, { id: 10, pname: '三级 1-1-2' }] }] }], defaultProps:{ children: 'children', label: 'pname' }, teachplanRules: { pname: [ {required: true, message: '请输入课程计划名称', trigger: 'blur'} ], status: [ {required: true, message: '请选择状态', trigger: 'blur'} ] }, teachplanActive:{}, teachplanId:'' } }, methods: { //选择视频,打开窗口 choosevideo(data){ //得到当前的课程计划 this.teachplanId = data.id // alert(this.teachplanId) this.mediaFormVisible = true;//打开窗口 }, //保存选择的视频 choosemedia(mediaId, fileOriginalName, mediaUrl){ alert(111) //保存视频到课程计划表中 let teachplanMedia ={} teachplanMedia.mediaId =mediaId; teachplanMedia.mediaFileOriginalName =fileOriginalName; teachplanMedia.mediaUrl =mediaUrl; teachplanMedia.courseId =this.courseid; //课程计划 teachplanMedia.teachplanId=this.teachplanId courseApi.savemedia(teachplanMedia).then(res=>{ if(res.success){ this.$message.success("选择视频成功") //查询课程计划 this.findTeachplan() }else{ this.$message.error(res.message) } }) }, //提交课程计划 addTeachplan(){ //校验表单 this.$refs.teachplanForm.validate((valid) => { if (valid) { //调用api方法 //将课程id设置到teachplanActive this.teachplanActive.courseid = this.courseid courseApi.addTeachplan(this.teachplanActive).then(res=>{ if(res.success){ this.$message.success("添加成功") //刷新树 this.findTeachplan() }else{ this.$message.error(res.message) } }) } }) }, //重置表单 resetForm(){ this.teachplanActive = {} }, append(data) { const newChild = { id: id++, label: 'testtest', children: [] }; if (!data.children) { this.$set(data, 'children', []); } data.children.push(newChild); }, edit(data){ //alert(data.id); }, remove(node, data) { const parent = node.parent; const children = parent.data.children || parent.data; const index = children.findIndex(d => d.id === data.id); children.splice(index, 1); }, renderContent(h, { node, data, store }) { return ( <span style="flex: 1; display: flex; align-items: center; justify-content: space-between; font-size: 14px; padding-right: 8px;"> <span> <span>{node.label}</span> </span> <span> <el-button style="font-size: 12px;" type="text" on-click={ () => this.choosevideo(data) }>{data.mediaFileOriginalName}&nbsp;&nbsp;&nbsp;&nbsp; 选择视频</el-button> <el-button style="font-size: 12px;" type="text" on-click={ () => this.edit(data) }>修改</el-button> <el-button style="font-size: 12px;" type="text" on-click={ () => this.remove(node, data) }>删除</el-button> </span> </span>); }, findTeachplan(){ this.teachplanList = [] //查询课程计划 courseApi.findTeachplanList(this.courseid).then(res=>{ if(res && res.children){ this.teachplanList = res.children; } }) } }, mounted(){ //课程id this.courseid = this.$route.params.courseid; //查询课程计划 this.findTeachplan() } } </script> <style> </style> ``` 在子组件想用这个方法调用父组件中方法,但无法调用,控制台上也没提示.后来发现,在webstorm中按着Ctrl键追踪不到.鼠标放上去提示Unresolved function or method $emit()
为什么我的DateTimePicker时间控件用不了
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ include file="/common/taglibs.jsp" %> <% 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>My JSP 'updateAttend.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link href="css/style.css" rel="stylesheet" type="text/css" /> <link rel="stylesheet" type="text/css" href="jequery/jquery.datetimepicker.css"/> <script src="jequery/jquery.js"></script> <script src="jequery/jquery.datetimepicker.js"></script> ${validate_css } ${jquery_js } ${validate_js } </head> <body> <div class="action"> <div class="t"> 申请休假 </div> <div class="pages"> <form action="user/doUpdateAttend.action" id="loginForm" > <input type="hidden" value="${item.id }" id="id" /> <table width="90%" border="0" cellspacing="0" cellpadding="0"> <tr > <td align="right" width="30%">姓名</td><td align="left"><input type="text" name="item.applicant" value="${sessionScope.loginuser.username}" readonly="readonly" id="username"/></td> </tr> <tr > <td align="right" width="30%">开始时间</td><td align="left"><input type="text" name="item.startime" value="${item.startime}" id="startime"/> <input id="open" type="button" value="open"/><input id="close" type="button" value="close"/><input id="reset" type="button" value="reset"/> </td> </tr> <tr > <td align="right" width="30%">结束时间</td><td align="left"><input type="text" name="item.endtime" value="${item.endtime }" id="endtime"/> <input id="opento" type="button" value="open"/><input id="closeto" type="button" value="close"/><input id="resetto" type="button" value="reset"/> </td> </tr> <tr > <td align="right" width="30%">请假天数</td><td align="left"><input type="text" name="item.days" value="${item.days }" id="days"/></td> </tr> <tr > <td align="right" width="30%">请假原因</td><td align="left"><textarea name="item.why" id="why">${item.why }</textarea></td> </tr> <tr > <td align="right" width="30%">审批人</td><td align="left"> <select name="item.oaUser.id"> <c:forEach var="item" items="${oauserList }" varStatus="s"> <option value="${item.tbRole.id }" >${item.nickname}</option> </c:forEach> </select> </td> </tr> <tr > <td align="center" colspan="2"><br/><input type="button" id="yesattend" value="提交申请" /> <input type="button" id="noattend" value="返回"/> </td> </tr> </table> </form> </div> </div> </body> </html> <script type="text/javascript"> $(function(){ $("#loginForm").validate({ rules:{ "item.startime":"required", "item.endtime":"required", "item.days":{ required:true, maxlength:2 }, "item.why":{ required:true, maxlength:10 } }, messages:{ "item.startime":"请输入开始时间!", "item.endtime":"请输入结束时间!", "item.days":{ required:"请输入密码!", maxlength:"请输入百位以内的数字!" }, "item.why":{ required:"请输入请假原因!", maxlength:"最多输入10个字符" } } }); $("#yesattend").click(function(){ if($("#loginForm").valid()){ //发送ajax请求 var url = "${ctx}/user/login.action"; $.post( url, {"item.username":$("#username").val(), "item.password":$("#password").val()} , function(data){ if(data.retcode == "0"){ window.location.href="${ctx}/inde.jsp"; }else{ alert(data.retmsg); } } ); } }); $("#noattend").click(function(){ //发送ajax请求 var url = "${ctx}/user/doUpdateAttend.action"; $.post( url, {"item.id":$("#id").val(), "item.status":2} , function(data){ if(data.retcode == "0"){ window.location.href="${ctx}/user/findAttends.action"; return false; }else{ alert(data.retmsg); } } ); }); }); //时间控件部分 $("#endtime").datetimepicker(); $("#opento").click(function(){ $("#endtime").datetimepicker("show"); }); $("#closeto").click(function(){ $("#endtime").datetimepicker("hide"); }); $("#resetto").click(function(){ $("#endtime").datetimepicker("reset"); }); $("#startime").datetimepicker(); $("#open").click(function(){ $("#startime").datetimepicker("show"); }); $("#close").click(function(){ $("#startime").datetimepicker("hide"); }); $("#reset").click(function(){ $("#startime").datetimepicker("reset"); }); </script>
为什么两个按钮我随便点击一个按钮都会更新成功,插入按钮我需要的是插入更能而不是更新功能,求大神指教
<%@ page import="com.trs.constants.AuthConstants"%> <%@ page import="org.springframework.validation.FieldError"%> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>短信管理-修改短信模板</title> <link rel="stylesheet" type="text/css" href="<%=basePath %>images/smsNewAndUpdatePopup.css" /> <link rel="stylesheet" type="text/css" href="<%=basePath %>images/bootstrap.min.css" /> <script src="<%=basePath %>images/jquery.min.js"></script> <script src="<%=basePath %>images/layer/layer.js"></script> </head> <body> <div class="smsNewAndUpdate_Popup"> <div class="titlePopup_head"> <span>修改短信模板</span> <img src="<%=basePath %>images/cls.jpg" class="titlePopup_head_right" onclick="cancelbtn()"> </div> <div class="smsNewAndUpdate_Popup_con"> <div class="smsNewAndUpdate_Popup_main"> <form class="form-horizontal" id="updateSmsTemp" action="<%=basePath%>smsTemp.do?method=updateSmsTemp" method="post"> <input type="hidden" name="stId" value="${requestScope.mrsSmsTemp.stId}"> <fieldset> <div class="popupInfo_left"> <span>名称:</span><input type="text" placeholder="" class="input-xlarge" value="${requestScope.mrsSmsTemp.tempName}" id="tempName" name="tempName"/><span class="required_Info">*</span> </div> <div class="popupInfo_left"> <span>类型:</span> <div class="drop_down"> <select class="border_clr" id="tempType" name="tempType" value="${requestScope.mrsSmsTemp.tempType}"> <option value="1" <c:if test="${requestScope.mrsSmsTemp.tempType eq '1'}">selected</c:if> >自取</option> <option value="2" <c:if test="${requestScope.mrsSmsTemp.tempType eq '2'}">selected</c:if> >邮寄</option> <option value="3" <c:if test="${requestScope.mrsSmsTemp.tempType eq '3'}">selected</c:if>>打卡</option> </select> </div> </div> <div class="popupInfo_left"> <span>内容:</span> <div class="drop_down"> <select class="border_clr" id="ditchId" name="ditchId" value="${requestScope.mrsSmsTemp.ditchId}"> <option value="0" <c:if test="${requestScope.mrsSmsTemp.ditchId eq '0'}">selected</c:if> >渠道选择</option> <option value="1" <c:if test="${requestScope.mrsSmsTemp.ditchId eq '1'}">selected</c:if> >APP</option> <option value="2" <c:if test="${requestScope.mrsSmsTemp.ditchId eq '2'}">selected</c:if> >网站</option> <option value="3" <c:if test="${requestScope.mrsSmsTemp.ditchId eq '3'}">selected</c:if>>纸媒</option> <option value="4" <c:if test="${requestScope.mrsSmsTemp.ditchId eq '4'}">selected</c:if>>杂志</option> </select> </div> <div class="drop_down"> <select class="border_clr" > <option value="标题">标题</option> <option value="作者">作者</option> <option value="时间">时间</option> </select> </div> <button class="border_clr0" onclick="insert()">插入</button> </div> <div class="popupInfo_left"> <textarea class="ml42 popupInfo_right_area" name="tempContent" id="tempContent" cols="57" rows="7" >${requestScope.mrsSmsTemp.tempContent }</textarea><span class="required_Info1">*</span> </div> <div class="popupInfo_left"> <span>说明:</span> <textarea class="popupInfo_right_area" name="tempDescription" id="tempDescription" cols="57" rows="7">${requestScope.mrsSmsTemp.tempDescription }</textarea> </div> </fieldset> </form> <div class="smsNewAndUpdatePopup_footer"> <button class="news-role-btn-success" onclick="successBtn()">确定</button> <button class="news-role-btn" onclick="cancelbtn()">取消</button> </div> </div> </div> </div> <script type="text/javascript"> function insert() { } //关闭弹出层 function cancelbtn() { var index = parent.layer.getFrameIndex(window.name); parent.layer.close(index); } function successBtn(){ var tempName = document.getElementById("tempName").value; var tempContent = document.getElementById("tempContent").value; if(tempName==""){ layer.tips('模板名称不能为空!', '#tempName', { tips: 3 }); }else if(tempContent==""){ layer.tips('模板内容不能为空!', '#tempContent', { tips: 3 }); }else{ document.getElementById("updateSmsTemp").submit(); } } </script> <!-- 判断如果返回了错误信息则显示 --> <c:forEach items="${requestScope.hasError}" var="hasError" > <c:set var="_haserror" scope="page" value="${hasError }"/> </c:forEach> <c:if test="${_haserror!=null}"> <script> layer.tips('${_haserror}', '#tempName', { tips: 3 }); </script> </c:if> <% //如果没有错误信息则代表成功,关闭当前窗口 %> <c:if test="${requestScope.success eq 'success'}"> <script> var index = parent.layer.getFrameIndex(window.name); parent.location.reload(); parent.layer.close(index); </script> </c:if> <script type="text/javascript"> (function($){ $.fn.extend({ insertAtCaret: function(myValue){ var $t=$(this)[0]; if (document.selection) { this.focus(); sel = document.selection.createRange(); sel.text = myValue; this.focus(); } else if ($t.selectionStart || $t.selectionStart == '0') { var startPos = $t.selectionStart; var endPos = $t.selectionEnd; var scrollTop = $t.scrollTop; $t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length); this.focus(); $t.selectionStart = startPos + myValue.length; $t.selectionEnd = startPos + myValue.length; $t.scrollTop = scrollTop; } else { this.value += myValue; this.focus(); } } }); })(jQuery); $(".border_clr0").change(function(){ $("#tempContent").insertAtCaret($(this).val()); }); </script> </body> </html>
jsp里面的foreach如何正确获取从 servlet里list里的值
jsp页面 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% 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>My JSP 'addowner.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body style="background-color:pink;"> <form action="AddOwnerServlet" method="post"> <center> <table style="background-color:pink; color:#2c92fb; text-align:center; margin:0 auto;"> <tr> <td><img src="image/1.png"/></td> <td> <div style="background-color:pink; color:#0ee3db"> <h1 style="color:write;">宠物医院管理系统</h1> </div> </td> <td><img src="image/3.png"/></td> </tr> <tr> <td><a href="index.jsp">系统首页</a></td> <td><a href="login.jsp">登录</a></td> <td><a href="register.jsp">注册</a></td> </tr> <tr> <table width="600" border="1" bordercolor="red" bgcolor="#FFFFEE"> <tr> <td>用户ID:</td> <td><input type="text" name="ownerID"></td> </tr> <tr> <td>用户登录名:</td> <td><input type="text" name="oname"></td> </tr> <tr> <td>用户密码:</td> <td><input type="password" name="opassword"></td> </tr> <tr> <td>性别:</td> <td><input type="text" name="osex"></td> </tr> <tr> <td>联系方式:</td> <td><input type="text" name="phone"></td> </tr> <tr> <td>地址:</td> <td><input type="text" name="address"></td> </tr> <tr> <td>宠物ID:</td> <td> <select id="list" name="petID"> <option value="">请选择宠物ID..</option> <c:forEach items="${requestScope.list}" var="listpets"> <option value="${listpets}">${listpets}</option> </c:forEach> </select> </td> </tr> <tr> <td><input type="submit" value="添加"></td> <td><input type="reset" value="重置"></td> </tr> </table> </tr> </table> </center> </form> </body> </html> servlet页面 package www.bttc.manager.ownerservlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import www.bttc.manager.model.Pets; import www.bttc.manager.model.Powner; import www.bttc.manager.service.OwnerService; import www.bttc.manager.service.PetsService; import www.bttc.manager.service.impl.OwnerServiceImpl; import www.bttc.manager.service.impl.PetsServiceImpl; import www.bttc.manager.utils.ServiceException; public class AddOwnerServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8");// 设置请求的编码方式 response.setCharacterEncoding("UTF-8");// 设置响应的编码方式 response.setContentType("text/html;charset=utf-8"); OwnerService ownerService=new OwnerServiceImpl(); PetsService petsService=new PetsServiceImpl(); HttpSession session=request.getSession(); int ownerID=Integer.parseInt(request.getParameter("ownerID")); String osex=request.getParameter("osex"); String oname=request.getParameter("oname"); String opassword=request.getParameter("opassword"); int phone=Integer.parseInt(request.getParameter("phone")); String address=request.getParameter("address"); int petID=Integer.parseInt(request.getParameter("petID")); /*try { List<Pets> list=(List<Pets>) petsService.findAllPetID(); //request.setAttribute("ownerID", ownerID); request.setAttribute("list", list); } catch (ServiceException e1) { e1.printStackTrace(); }*/ try { //Pets pets=new Pets(); Pets pets=petsService.findPetsByPetsID(petID); if(ownerService.findOwnerByOwnerID(ownerID)!=null){ session.setAttribute("message", "添加的普通用户记录已存在!"); request.getRequestDispatcher("addowner.jsp").forward(request, response); }else{ Powner owner=new Powner(ownerID,osex,oname,opassword,phone,address,pets); ownerService.addOwner(owner); //Powner owner=ownerService.addOwner(owner); session.setAttribute("message", "添加普通用户已成功!"); request.getRequestDispatcher("/admin.jsp").forward(request, response); } } catch (ServiceException e) { e.printStackTrace(); } } } 另一个servlet package www.bttc.manager.ownerservlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import www.bttc.manager.model.Pets; import www.bttc.manager.service.PetsService; import www.bttc.manager.service.impl.PetsServiceImpl; import www.bttc.manager.utils.ServiceException; public class SelectPetID extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8");// 设置请求的编码方式 response.setCharacterEncoding("UTF-8");// 设置响应的编码方式 response.setContentType("text/html;charset=utf-8"); //int petID=Integer.parseInt(request.getParameter("petID")); PetsService petsService=new PetsServiceImpl(); try { List<Pets> pets = petsService.findAllPetID(); request.setAttribute("listpets", pets); request.getRequestDispatcher("/addowner.jsp").forward(request, response); } catch (ServiceException e) { e.printStackTrace(); } } }
用servlet打出数据库在jsp页面列表展示,但是jsp页面始终不出现数据库中的值
这是servlet: public class OrderListServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ List<Order> list = new ArrayList<Order>(); OrderDAO dao=new OrderDAOImpl(); String sql = "select * from order"; response.setContentType("text/html"); try { list = dao.getorderList(sql); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("orderlist", list); request.getRequestDispatcher("OrderList.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ } } function: public List<Order> getorderList(String sql) throws Exception{ List<Order> list = new ArrayList<Order>(); // sql = "select * from order"; //String sql2 = "select * from productinfo"; PreparedStatement pstmt = null ; DBConnect dbc = null; java.sql.ResultSet rs=null; try{ dbc = new DBConnect() ; pstmt = dbc.getConnection().prepareStatement(sql) ; rs = pstmt.executeQuery(sql); while(rs.next()){ String buyername = rs.getString("buyername"); // String productname = rs.getString("productname"); // String productimage = rs.getString("productimage"); // String unitnum = rs.getString("unitnum"); // String unitvalue = rs.getString("unitvalue"); String id = rs.getString("id"); String sum = rs.getString("sum"); Order order = new Order(); order.setId(id); order.setBuyername(buyername); // order.setProductname(productname); // order.setUnitvalue(unitvalue); // order.setUnitnum(unitnum); order.setSum(sum); list.add(order); } rs.close(); pstmt.close(); }catch (SQLException e){ System.out.println(e.getMessage()); }finally{ dbc.close() ; } return list; } jsp: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ page import="java.io.*,java.util.*,java.sql.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ page import="jspservlet.servlet.*"%> <body> <form method="post" action="./orderlist"> <table border="1"cellpadding="0" cellspacing="0"width="80%" align="center"> <tr> <th>ID</th> <th>buyer name</th> <th>sum</th> </tr> <c:forEach items="${request.orderlist}" var="ordert"> <tr> <td>${order.id }</td> <td>${order.buyername }</td> <td>${order.sum }</td> </tr> </c:forEach> </table> </form> </body>
右键菜单 结合 树节点编辑的问题
代码如下: //菜单 修改昵称 var QQForm_MenuChangeNike = new Ext.menu.Item({ id:'QQForm_MenuChangeNike' ,name:'QQForm_MenuChangeNike' ,text:'修改昵称' ,checked:true ,listeners:{ 'click' : function(th,e) { //编辑Edit var QQForm_MenuChangeNike_TreeEditor = new Ext.tree.TreeEditor( Ext.getCmp('QQForm_QQFriendTree') ,{ allowBlank : false ,id:'QQForm_MenuChangeNike_TreeEditor' ,cancelOnEsc : true ,listeners : { 'complete ':function(th,newName,oldName){ alert('dddd'); ModifyQQFriendName(th,node.id,NewName,node.parentNodeId);//修改名称 } } }) QQForm_MenuChangeNike_TreeEditor.editNode = node; QQForm_MenuChangeNike_TreeEditor.startEdit(node.ui.textNode); } } }) /* *修改名称 */ function ModifyQQFriendName(th,QQFriendID,NewName,ParentID) { alert("ssss"); var conn = new Ext.data.Connection(); conn.request({ url:'json/QQ/QQUser.aspx' ,method:'POST' ,params:{FunctionName:'ModifyQQFriend',QQFriendID:QQFriendID,UserID:'-99',UserFriendID:'-99',FriendNike:NewName,IsLeaf:'-99',ParentID:ParentID} ,success : function(responseObject){ var json = Ext.util.JSON.decode(responseObject.responseText); if (json.success) { //成功提交 暂时不处理 } else { Ext.Msg.alert('提示','提交数据发生错误,消息没有成功发送!'); th.cancelEdit(true); } } ,failure : function(responseObject){ Ext.Msg.alert('提示','提交数据发生错误,消息没有成功发送!'); th.cancelEdit(true); } }); th.setDisabled(true); } 问题如下: 1。当我编辑完毕后 点击回车 却发现没有执行'complete'事件中的代码 为什么? 2。我想当编辑完毕后 取消treeEditor和tree的关联 免得点击一个节点的时候 再出现编辑框, 编辑只能通过右键菜单才能进行 如何实现呢? [b]问题补充:[/b] 我把全部代码贴上来吧 请高手帮我看看 我主要想实现的效果是 在树上点击右键菜单中的“修改昵称” 出现treeEditor修改节点名称提交数据库 修改完毕后treeEditor不再显示 除非用户再点击右键菜单中的“修改昵称” 避免用户在树上直接点击昵称修改 请告诉我修改的方法 谢谢啦 这段代码中 还有一个错误 就是运行到 temp_Editor.startEdit(node.ui.textNode); 的时候 会报:“Microsoft JScript 运行时错误: 对象不支持此属性或方法”的错误 为什么呢?想不通 如果把TreeEditor 定义到"修改昵称"中就不会抱错 //用于智能提示显示 ///<reference path="../vswd-ext_2.2.js" /> function ShowQQMenu(node,e,UserID) { //编辑Edit var QQForm_MenuChangeNike_TreeEditor = new Ext.tree.TreeEditor( Ext.getCmp('QQForm_QQFriendTree') ,{ allowBlank : false ,id:'QQForm_MenuChangeNike_TreeEditor' ,cancelOnEsc : true ,listeners : { 'complete':function(th,newName,oldName){ ModifyQQFriendName(th,node.id,NewName,node.parentNodeId); } } }) //-->右键菜单 //菜单 修改昵称 var QQForm_MenuChangeNike = new Ext.menu.Item({ id:'QQForm_MenuChangeNike' ,name:'QQForm_MenuChangeNike' ,text:'修改昵称' ,checked:true ,listeners:{ 'click' : function(th,e) { var temp_Editor = Ext.getCmp('QQForm_MenuChangeNike_TreeEditor'); temp_Editor.editNode = node; temp_Editor.startEdit(node.ui.textNode); } } }) //菜单 添加组 var QQForm_AddQQGroup= new Ext.menu.Item({ id:'QQForm_AddQQGroup' ,name:'QQForm_AddQQGroup' ,text:'添加组' ,checked:true }) //菜单 进行聊天 var QQForm_MenuChat = new Ext.menu.Item({ id:'QQForm_MenuChat' ,name:'QQForm_MenuChat' ,text:'进行聊天' ,checked:true ,visible : false ,listeners: { 'click':function(o,e) { var temp_FormQQChat = Ext.getCmp('ChatForm|'+node.id); if (temp_FormQQChat) { temp_FormQQChat.setActive(true); } else { ShowCharForm(UserID, node.id,node.text); } } } }) //菜单 删除好友 var QQForm_MenuDelete = new Ext.menu.Item({ id:'QQForm_MenuDelete' ,name:'QQForm_MenuDelete' ,text:'删除好友' ,checked:true }) var QQForm_ContextMenu = new Ext.menu.Menu({ id : 'QQForm_LeafContextMenu' ,name : 'QQForm_LeafContextMenu' ,items:[QQForm_MenuChangeNike,QQForm_MenuChat,QQForm_MenuDelete] }) //<--右键菜单 if (node.leaf) { QQForm_MenuChangeNike.text = '修改昵称'; QQForm_MenuChat.setVisible(true); QQForm_MenuDelete.setVisible(true); QQForm_AddQQGroup.setVisible(false); e.preventDefault(); node.select(); //var temp_QQForm_ContextMenu = Ext.getCmp('QQForm_ContextMenu'); QQForm_ContextMenu.showAt(e.getXY()); } else { QQForm_MenuChangeNike.text = '修改组名'; QQForm_AddQQGroup.setVisible(true); QQForm_MenuChat.setVisible(false); QQForm_MenuDelete.setVisible(false); e.preventDefault(); node.select(); QQForm_ContextMenu.showAt(e.getXY()); } } //-----------内部方法----------------- /* *修改名称 */ function ModifyQQFriendName(th,QQFriendID,NewName,ParentID) { alert("ssss"); var conn = new Ext.data.Connection(); conn.request({ url:'json/QQ/QQUser.aspx' ,method:'POST' ,params:{FunctionName:'ModifyQQFriend',QQFriendID:QQFriendID,UserID:'-99',UserFriendID:'-99',FriendNike:NewName,IsLeaf:'-99',ParentID:ParentID} ,success : function(responseObject){ var json = Ext.util.JSON.decode(responseObject.responseText); if (json.success) { //成功提交 暂时不处理 } else { Ext.Msg.alert('提示','提交数据发生错误,消息没有成功发送!'); th.cancelEdit(true); } } ,failure : function(responseObject){ Ext.Msg.alert('提示','提交数据发生错误,消息没有成功发送!'); th.cancelEdit(true); } }); } [b]问题补充:[/b] 再更新一边格式化的代码看看 [code="java"]//用于智能提示显示 ///<reference path="../vswd-ext_2.2.js" /> function ChangeUserInfo() { //用户名 var ChangeUserInfoForm_UserName = new Ext.form.TextField({ id: 'ChangeUserInfoForm_UserName', fieldLabel: '<span style="color:red"> 登陆名</span>', allowBlank: false, emptyText: '请填写 用户名', maxLength: 15, maxLengthText: '用户名长度只能在7-15之间', minLength: 7, minLengthText: '用户名长度只能在7-15之间', emptyText: "请输入 用户名" //,labelWidth:5 }); //昵称 var ChangeUserInfoForm_NikeName = new Ext.form.TextField({ id: 'ChangeUserInfoForm_NikeName', fieldLabel: '<span style="color:red"> 用户昵称</span>', allowBlank: false, emptyText: '请填写 用户昵称', maxLength: 15, maxLengthText: '用户昵称长度只能在1-15之间', minLength: 1, minLengthText: '用户昵称长度只能在1-15之间', emptyText: "请输入 用户昵称" }); //性别 var ChangeUserInfoForm__sex_data = [['1', '男'], ['2', '女']]; var ChangeUserInfoForm_sex_store = new Ext.data.SimpleStore({ fields: ['value', 'text'], data: ChangeUserInfoForm__sex_data }); var ChangeUserInfoForm_Sex = new Ext.form.ComboBox({ id: 'ChangeUserInfoForm_Sex', hiddenName: 'ChangeUserInfoForm_Sex', store: ChangeUserInfoForm_sex_store, emptyText: '请选择性别', fieldLabel: '<span style="color:red">性别</span>', mode: 'local', triggerAction: 'all', valueField: 'value', displayField: 'text', allowBlank: false, width: 113, editable: true, hiddenName: 'value' }); //密码 var ChangeUserInfoForm_Password = new Ext.form.TextField({ id: 'ChangeUserInfoForm_Password', name: 'ChangeUserInfoForm_Password', fieldLabel: '<span style="color:red">密码</span>', inputType: 'password', labelWidth: 100, allowBlank: false, emptyText: '********', maxLength: 10, maxLengthText: '密码长度只能在6-10之间', minLength: 6, minLengthText: '密码长度只能在6-10之间', listeners: { 'blur': function (th) { CheckPassWord(); } } }); //密码确认 var ChangeUserInfoForm_ConfirmPassword = new Ext.form.TextField({ id: 'ChangeUserInfoForm_ConfirmPassword', name: 'ChangeUserInfoForm_ConfirmPassword', fieldLabel: '<span style="color:red">确认密码</span>', inputType: 'password', labelWidth: 100, allowBlank: false, emptyText: '********', maxLength: 10, maxLengthText: '密码长度只能在6-10之间', minLength: 6, minLengthText: '密码长度只能在6-10之间', listeners: { 'blur': function (th) { CheckPassWord() } } }); //邮件地址 var ChangeUserInfoForm_Mail = new Ext.form.TextField({ id: 'ChangeUserInfoForm_Mail', fieldLabel: '<span style="color:red">邮箱</span>', vtype: 'email', labelWidth: 100, allowBlank: false, emptyText: '请填写 邮箱', regexText: "请输入电子邮件地址" }); //MSN var ChangeUserInfoForm_MSN = new Ext.form.TextField({ id: 'ChangeUserInfoForm_MSN', fieldLabel: 'MSN', vtype: 'email', labelWidth: 100, allowBlank: true, regexText: "请输入正确的MSN地址" }); //QQ var ChangeUserInfoForm_QQ = new Ext.form.NumberField({ id: 'ChangeUserInfoForm_QQ', name: 'ChangeUserInfoForm_QQ', fieldLabel: 'QQ', labelWidth: 100, allowBlank: true, maxLength: 8, minLength: 4, allowDecimals: false, minValue: 1000, minText: '请输入正确的QQ号码', invalidText: '请输入正确的QQ号码' }); //取消按钮 var ChangeUserInfoForm_CanelButton = new Ext.Button({ id: 'ChangeUserInfoForm_CanelButton', text: '取消', handler: function () { //this.ownerCt.close(); Ext.getCmp('ChangeUserInfoForm').close(); } }) //确定按钮 var ChangeUserInfoForm_OKButton = new Ext.Button({ id: 'ChangeUserInfoForm_OKButton', text: '确定', handler: function () { Ext.getCmp('ChangeUserInfoForm').close(); } }) //返回界面 return new Ext.Window({ id: 'ChangeUserInfoForm', title: '修改用户信息', frame: true, modal: true, width: 500 //,height:250 , autoHeight: true //,autoWidth:true , resizable: false, items: [{ xtype: 'form', layout: 'column', border: false, frame: true, items: [{ layout: 'form', border: false, items: [ChangeUserInfoForm_UserName] }, { layout: 'form', border: false, items: [ChangeUserInfoForm_NikeName] }] }, { xtype: 'form', layout: 'column', border: false, frame: true, items: [{ columnWidth: .5, layout: 'form', border: false, items: [ChangeUserInfoForm_Password] }, { columnWidth: .5, layout: 'form', border: false, items: [ChangeUserInfoForm_ConfirmPassword] }] }, { layout: 'column', border: false, frame: true, items: [{ columnWidth: .5, layout: 'form', border: false, items: [ChangeUserInfoForm_Sex] }, { columnWidth: .5, layout: 'form', border: false, items: [ChangeUserInfoForm_Mail] }] }, { layout: 'column', border: false, frame: true, items: [{ columnWidth: .5, layout: 'form', border: false, items: [ChangeUserInfoForm_MSN] }, { columnWidth: .5, layout: 'form', border: false, items: [ChangeUserInfoForm_QQ] }] }], buttons: [ChangeUserInfoForm_CanelButton, ChangeUserInfoForm_OKButton] }) }[/code] [b]问题补充:[/b] 刚才那个错了 是这个 [code="java"]//用于智能提示显示 ///<reference path="../vswd-ext_2.2.js" /> function ShowQQMenu(node, e, UserID) { //编辑Edit var QQForm_MenuChangeNike_TreeEditor = new Ext.tree.TreeEditor( Ext.getCmp('QQForm_QQFriendTree'), { allowBlank: false, id: 'QQForm_MenuChangeNike_TreeEditor', cancelOnEsc: true, listeners: { 'complete': function (th, newName, oldName) { ModifyQQFriendName(th, node.id, NewName, node.parentNodeId); } } }) //-->右键菜单 //菜单 修改昵称 var QQForm_MenuChangeNike = new Ext.menu.Item({ id: 'QQForm_MenuChangeNike', name: 'QQForm_MenuChangeNike', text: '修改昵称', checked: true, listeners: { 'click': function (th, e) { var temp_Editor = Ext.getCmp('QQForm_MenuChangeNike_TreeEditor'); temp_Editor.editNode = node; temp_Editor.startEdit(node.ui.textNode); } } }) //菜单 添加组 var QQForm_AddQQGroup = new Ext.menu.Item({ id: 'QQForm_AddQQGroup', name: 'QQForm_AddQQGroup', text: '添加组', checked: true }) //菜单 进行聊天 var QQForm_MenuChat = new Ext.menu.Item({ id: 'QQForm_MenuChat', name: 'QQForm_MenuChat', text: '进行聊天', checked: true, visible: false, listeners: { 'click': function (o, e) { var temp_FormQQChat = Ext.getCmp('ChatForm|' + node.id); if (temp_FormQQChat) { temp_FormQQChat.setActive(true); } else { ShowCharForm(UserID, node.id, node.text); } } } }) //菜单 删除好友 var QQForm_MenuDelete = new Ext.menu.Item({ id: 'QQForm_MenuDelete', name: 'QQForm_MenuDelete', text: '删除好友', checked: true }) var QQForm_ContextMenu = new Ext.menu.Menu({ id: 'QQForm_LeafContextMenu', name: 'QQForm_LeafContextMenu', items: [QQForm_MenuChangeNike, QQForm_MenuChat, QQForm_MenuDelete] }) //<--右键菜单 if (node.leaf) { QQForm_MenuChangeNike.text = '修改昵称'; QQForm_MenuChat.setVisible(true); QQForm_MenuDelete.setVisible(true); QQForm_AddQQGroup.setVisible(false); e.preventDefault(); node.select(); //var temp_QQForm_ContextMenu = Ext.getCmp('QQForm_ContextMenu'); QQForm_ContextMenu.showAt(e.getXY()); } else { QQForm_MenuChangeNike.text = '修改组名'; QQForm_AddQQGroup.setVisible(true); QQForm_MenuChat.setVisible(false); QQForm_MenuDelete.setVisible(false); e.preventDefault(); node.select(); QQForm_ContextMenu.showAt(e.getXY()); } } //-----------内部方法----------------- /* *修改名称 */ function ModifyQQFriendName(th, QQFriendID, NewName, ParentID) { alert("ssss"); var conn = new Ext.data.Connection(); conn.request({ url: 'json/QQ/QQUser.aspx', method: 'POST', params: { FunctionName: 'ModifyQQFriend', QQFriendID: QQFriendID, UserID: '-99', UserFriendID: '-99', FriendNike: NewName, IsLeaf: '-99', ParentID: ParentID }, success: function (responseObject) { var json = Ext.util.JSON.decode(responseObject.responseText); if (json.success) { //成功提交 暂时不处理 } else { Ext.Msg.alert('提示', '提交数据发生错误,消息没有成功发送!'); th.cancelEdit(true); } }, failure: function (responseObject) { Ext.Msg.alert('提示', '提交数据发生错误,消息没有成功发送!'); th.cancelEdit(true); } }); }[/code]
JSP页面无法显示数据库信息???求助啊!有图有代码,求大神雪中送炭
JSP页面显示这样:![图片说明](https://img-ask.csdn.net/upload/201504/20/1429541114_426572.png) JSP代码: ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="../base.jsp"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>新闻类型列表</title> <style type="text/css"> body{ background-image: url("images/bg_newsDetailList1.jpg"); background-position:-100px -300px; } .enableStyle{ background-color: ; color:black; } .disableStyle{ background-color: red; color: white; } </style> <script type="text/javascript"> function checkSelected(){ var flag=false; var ids=document.getElementsByName("ids"); for(var i=0;i<ids.length;i++){ if(ids[i].checked){ flag=true; break; } } if(!flag){ alert("请选择需要删除的数据!"); }else{ if(confirm("确定要删除选中的数据吗?")){ document.myform.submit(); } } } </script> </head> <body> <form name="myform" method="post" action="newstypeservlet?op=batchDelete"> <table border="1"> <tr> <th>编号</th> <th>类型名</th> <th>编辑</th> <th>删除</th> </tr> <c:forEach items="${requestScope.newsTypeList }" var="newsType" varStatus="status"> <tr style="background-color: ${status.index%2==0?'red':'green' } "> <td> <input type="checkbox" name="ids" value="${newsType.id }"/> ${newsType.id } </td> <td>${newsType.typeName }</td> <td><a href="newstypeservlet?op=toEdit&id=${newsType.id }">编辑</a></td> <td><a href="newstypeservlet?op=delete&id=${newsType.id }">删除</a></td> </tr> </c:forEach> <tr> <td colspan="4" > <input type="button" value="批量删除" onclick="checkSelected()"/> </td> </tr> </table> </form> </body> </html> ``` 其中base.jsp代码如下: ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <base href="<%=basePath %>" /> ``` Servlet代码: ``` protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // System.out.println("进入sevlet"); request.setCharacterEncoding("UTF-8");// 解决Post提交时的乱码问题 String op = request.getParameter("op");// 注意:此处的JSP页面不放在根目录下,Servlet就无法接收到页面传来的数据,因为web.xml配置信息无法覆盖 if ("add".equals(op)) { addNewsType(request, response); } else if ("list".equals(op)) { listNewsType(request, response); } else if ("batchDelete".equals(op)) { batchDelete(request, response); } else if ("delete".equals(op)) { deleteById(request, response); } } // 新闻列表 private void listNewsType(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { NewsTypeService newsTypeService = new NewsTypeService(); List<NewsType> newsTypeList = newsTypeService.findAll(); request.setAttribute("newsTypeList", newsTypeList); request.getRequestDispatcher("../listNewsType.jsp").forward(request, response); } private void deleteById(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getWriter(); String idStr = request.getParameter("id"); if (idStr == null || "".equals(idStr)) { out.write("<script>alert('密码不能为空');history.back();</script>"); return; } int id = Integer.parseInt(idStr); NewsTypeService newsTypeService = new NewsTypeService(); newsTypeService.delete(id); // 删除数据后,返回列表 listNewsType(request, response); } private void batchDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] ids = request.getParameterValues("ids"); NewsTypeService newsTypeService = new NewsTypeService(); newsTypeService.batchDelete(ids); // 删除数据后,返回列表 listNewsType(request, response); } ``` service代码: ``` package com.syf.service; import java.util.List; import com.syf.dao.NewsTypeDao; import com.syf.entity.NewsType; public class NewsTypeService { public int save(NewsType newsType) { return new NewsTypeDao().save(newsType); } public int batchDelete(String[] ids) { return new NewsTypeDao().batchDelete(ids); } public List<NewsType> findAll() { return new NewsTypeDao().findAll(); } public int delete(int id) { return new NewsTypeDao().delete(id); } } ``` DAO层代码: ``` package com.syf.dao; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.syf.entity.NewsType; import com.syf.util.ArrayUtil; import com.syf.util.DBUtil; public class NewsTypeDao { DBUtil dbUtil = new DBUtil(); // 保存新闻类型 public int save(NewsType newsType) { String sql = "insert into newstype(typeName) values (?)"; Object[] params = { newsType.getTypeName() }; return dbUtil.executeUpdate(sql, params); // executeUpdate的返回值是一个整数,指示受影响的行数(即更新计数) } public List<NewsType> findAll() { List<NewsType> newsTypeList = new ArrayList<NewsType>(); String sql = "select * from newstype"; ResultSet rs = dbUtil.executeQuery(sql, null); try { while (rs.next()) { NewsType newsType = new NewsType(rs.getInt("id"), rs.getString("typeName")); newsTypeList.add(newsType);// 将对象放入到集合 } } catch (SQLException e) { e.printStackTrace(); return newsTypeList; } finally { dbUtil.closeAll(); } return newsTypeList; } /** * 批量删除 * * @param ids * 指定的ID集合 * @return */ public int batchDelete(String[] ids) { // TODO Auto-generated method stub String sql = "delete from newstype where id in(?)"; Object[] params = { ArrayUtil.array2String(ids, ",") }; return dbUtil.executeUpdate(sql, params); } /** * 根据Id进行删除 * * @param id * @return */ public int delete(int id) { String sql = "delete from newsType where id=?"; Object[] params = { id }; return dbUtil.executeUpdate(sql, params); } } ``` entity实体类代码: ``` package com.syf.entity; public class NewsType { private int id; private String typeName; public NewsType() { super(); } public NewsType(String typeName) { super(); this.typeName = typeName; } public NewsType(int id, String typeName) { super(); this.id = id; this.typeName = typeName; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTypeName() { return typeName; } public void setTypeName(String typeName) { this.typeName = typeName; } } ```
提交表单时如何既能先表单验证再访问action
<p>问题具体描述:我想对表单做及时验证功能,在提交数据前对表单数据验证,可最后一个文本框不知道如何设置,试了试在提交按钮里与form&lt;onsubmit="return 函数()" 效果一样,都同时执行了action和表单验证,有没有哪种方法能先表单在action,我不想用xml验证action,效果不好。</p> <p>jsp页面代码:</p> <p>&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;<br>&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;<br>&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%&gt;<br>&lt;%<br>    String path = request.getContextPath();<br>    String basePath = request.getScheme() + "://"<br>            + request.getServerName() + ":" + request.getServerPort()<br>            + path + "/";<br>%&gt;<br><br>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br>&lt;html&gt;<br>    &lt;head&gt;<br>        &lt;base href="&lt;%=basePath%&gt;"&gt;<br><br>        &lt;title&gt;填写进货信息&lt;/title&gt;<br><br>        &lt;meta http-equiv="pragma" content="no-cache"&gt;<br>        &lt;meta http-equiv="cache-control" content="no-cache"&gt;<br>        &lt;meta http-equiv="expires" content="0"&gt;<br>        &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt;<br>        &lt;meta http-equiv="description" content="This is my page"&gt;<br>        &lt;link rel="stylesheet" type="text/css" href="theme/office/style.css" /&gt;<br>        &lt;script type="text/javascript" src="js/Calendar6.js"&gt;<br>&lt;/script&gt;<br><br>    &lt;/head&gt;<br>    &lt;script type="text/javascript"&gt;<br>function checkName() {<br>    var str = document.getElementById("name").value;<br>    if (str == '') {<br>        document.getElementById("vname").innerHTML = "&lt;font color='red'&gt;请填写进货名称&lt;/font&gt;";<br>        return false;<br>    } else {<br>        document.getElementById("vname").innerHTML = "";<br>        return true;<br>    }<br>}<br>function checkNum() {<br>    var str = document.getElementById("num").value;<br>    if (str == '') {<br>        document.getElementById("vnum").innerHTML = "&lt;font color='red'&gt;请填写进货数量&lt;/font&gt;";<br>        return false;<br>    } else {<br>        document.getElementById("vnum").innerHTML = "";<br>        return true;<br>    }<br>}<br>function checkMan() {<br>    var str = document.getElementById("man").value;<br>    if (str == '') {<br>        document.getElementById("vman").innerHTML = "&lt;font color='red'&gt;请填写进货人&lt;/font&gt;";<br>        return false;<br>    } else {<br>        document.getElementById("vman").innerHTML = "";<br>        return true;<br>    }<br>}<br>function checkSupplier() {<br>    var str = document.getElementById("supplier").value;<br>    if (str == '') {<br>        document.getElementById("vs").innerHTML = "&lt;font color='red'&gt;请填写供应商&lt;/font&gt;";<br>        return false;<br>    } else {<br>        document.getElementById("vs").innerHTML = "";<br>        return true;<br>    }<br>}<br>function checkPrice() {<br>    var str = document.getElementById("price").value;<br>    if (str == '') {<br>        document.getElementById("vp").innerHTML = "&lt;font color='red'&gt;请输入单价&lt;/font&gt;";<br>        return false;<br>    } else {<br>        document.getElementById("vp").innerHTML = "";<br>        return true;<br>    }<br>}<br>function checkAll() {<br>    if (checkName() &amp;&amp; checkNum() &amp;&amp; checkMan() &amp;&amp; checkSupplier()<br>            &amp;&amp; checkPrice()) {<br>        return true;<br>    } else {<br>        return false;<br>    }<br>}<br>&lt;/script&gt;<br><br>    &lt;body class="tab-nav-page" onmousedown="return false;"<br>        onselectstart="return false;"&gt;<br><br>        &lt;ul class="group"&gt;<br>            &lt;li&gt;<br>                &lt;div class="hl" id="tb1"&gt;<br>                    &lt;span class="l"&gt; &lt;/span&gt;<br>                    &lt;span class="a"&gt;&lt;/span&gt;<br>                    &lt;span class="r"&gt; &lt;/span&gt;<br>                &lt;/div&gt;<br>            &lt;/li&gt;<br>            &lt;li class="active"&gt;<br>                &lt;div class="hl" id="tb2"&gt;<br>                    &lt;span class="l"&gt; &lt;/span&gt;<br>                    &lt;span class="a"&gt;进货新增 &lt;/span&gt;<br>                    &lt;span class="r"&gt; &lt;/span&gt;<br>                &lt;/div&gt;<br>            &lt;/li&gt;<br>        &lt;/ul&gt;<br>        &lt;div class="bgline"&gt;&lt;/div&gt;<br>        &lt;/br&gt;<br>        &lt;/br&gt;<br>        &lt;table class="page-header" align="center"&gt;<br>            &lt;tbody&gt;<br>                &lt;tr&gt;<br>                    &lt;td class="title"&gt;<br>                        &lt;img src="images/menu/infofind.gif" /&gt;<br>                        &lt;span&gt;填写进货信息&lt;/span&gt;<br>                    &lt;/td&gt;<br>                &lt;/tr&gt;<br>            &lt;/tbody&gt;<br>        &lt;/table&gt;<br>        &lt;form enctype="multipart/form-data" method="post" name="form1"<br>            action="buy_addBuy" onsubmit="checkAll()"&gt;<br>            &lt;table class="frame" align="center"&gt;<br>                &lt;tbody&gt;<br>                    &lt;tr&gt;<br>                        &lt;td class="label"&gt;<br>                            商品名称:<br>                        &lt;/td&gt;<br>                        &lt;td&gt;<br>                            &lt;input type="text" name="buy.goodsname" id="name"<br>                                onblur="checkName()" /&gt;<br>                            &lt;div id="vname" style="display: inline"&gt;&lt;/div&gt;<br>                        &lt;/td&gt;<br><br>                    &lt;/tr&gt;<br>                    &lt;tr&gt;<br>                        &lt;td class="label"&gt;<br>                            商品类型:<br>                        &lt;/td&gt;<br>                        &lt;td&gt;<br>                            &lt;select class="text" name="typeid"&gt;<br>                                &lt;option value="--选择进货类型--"&gt;<br>                                    --选择进货类型--<br>                                &lt;/option&gt;<br>                                &lt;c:forEach items="${type}" var="type"&gt;<br>                                    &lt;option value="${type.id}"&gt;<br>                                        ${type.typename}<br>                                    &lt;/option&gt;<br>                                &lt;/c:forEach&gt;<br><br><br>                            &lt;/select&gt;<br>                        &lt;/td&gt;<br>                    &lt;/tr&gt;<br>                    &lt;tr&gt;<br>                        &lt;td class="label"&gt;<br>                            进货数量:<br>                        &lt;/td&gt;<br>                        &lt;td&gt;<br>                            &lt;s:textfield name="buy.goodsnum" cssClass="text" id="num"<br>                                onblur="checkNum()" /&gt;<br>                            &lt;div id="vnum" style="display: inline"&gt;&lt;/div&gt;<br>                        &lt;/td&gt;<br>                    &lt;/tr&gt;<br>                    &lt;tr&gt;<br>                        &lt;td class="label"&gt;<br><br>                            进货日期:<br>                        &lt;/td&gt;<br>                        &lt;td&gt;<br>                            &lt;input type="text" class="text" name="buy.buydate"<br>                                onfocus=calendar(this) /&gt;<br>                        &lt;/td&gt;<br>                    &lt;/tr&gt;<br>                    &lt;tr&gt;<br>                        &lt;td class="label"&gt;<br>                            进货人:<br>                        &lt;/td&gt;<br>                        &lt;td&gt;<br>                            &lt;s:textfield name="buy.buyman" cssClass="text" id="man"<br>                                onblur="checkMan()" /&gt;<br>                            &lt;div id="vman" style="display: inline"&gt;&lt;/div&gt;<br>                        &lt;/td&gt;<br>                    &lt;/tr&gt;<br>                    &lt;tr&gt;<br>                        &lt;td class="label"&gt;<br>                            供应商:<br>                        &lt;/td&gt;<br>                        &lt;td&gt;<br>                            &lt;s:textfield name="buy.supplier" cssClass="text" id="supplier"<br>                                onblur="checkSupplier()" /&gt;<br>                            &lt;div id="vs" style="display: inline"&gt;&lt;/div&gt;<br>                        &lt;/td&gt;<br>                    &lt;/tr&gt;<br>                    &lt;tr&gt;<br>                        &lt;td class="label"&gt;<br>                            单价:<br>                        &lt;/td&gt;<br>                        &lt;td&gt;<br>                            &lt;s:textfield name="buy.price" cssClass="text" id="price"<br>                                onblur="checkPrice()" /&gt;<br>                            &lt;div style="display: inline" id="vp"&gt;&lt;/div&gt;<br>                        &lt;/td&gt;<br>                    &lt;/tr&gt;<br>                  <br>                &lt;/tbody&gt;<br>            &lt;/table&gt;<br>            &lt;table align="center"&gt;<br>                &lt;tbody&gt;<br>                    &lt;tr class="cmdbar"&gt;<br>                        &lt;td&gt;<br>                            &lt;input type="submit" value="提交" /&gt;<br>                        &lt;/td&gt;<br>                        &lt;td&gt;<br>                            &lt;input type="reset" value="重填" /&gt;<br>                        &lt;/td&gt;<br>                    &lt;/tr&gt;<br>                &lt;/tbody&gt;<br>            &lt;/table&gt;<br>        &lt;/form&gt;<br><br>    &lt;/body&gt;<br>&lt;/html&gt;</p>
两个JS文件冲突!只要有hover()事件的js和底下的js文件同时用就报错!
eval(function (p, a, c, k, e, d) { e = function (c) { return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if (!''.replace(/^/, String)) { while (c--) { d[e(c)] = k[c] || e(c) } k = [function (e) { return d[e] }]; e = function () { return '\\w+' }; c = 1 }; while (c--) { if (k[c]) { p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]) } } return p }('o ay={a6:\'1.11\'};m $5B(N){k(N!=9e)};m $G(N){B(!$5B(N))k U;B(N.4t)k\'L\';o G=5X N;B(G==\'2t\'&&N.a8){21(N.7v){Y 1:k\'L\';Y 3:k(/\\S/).2N(N.91)?\'a9\':\'bo\'}}B(G==\'2t\'||G==\'m\'){21(N.7X){Y 2j:k\'1u\';Y 7u:k\'5e\';Y 1f:k\'7F\'}B(5X N.V==\'3P\'){B(N.2U)k\'bw\';B(N.7b)k\'1b\'}}k G};m $1Q(){o 4f={};M(o i=0;i<1b.V;i++){M(o I 1e 1b[i]){o ap=1b[i][I];o 5z=4f[I];B(5z&&$G(ap)==\'2t\'&&$G(5z)==\'2t\')4f[I]=$1Q(5z,ap);19 4f[I]=ap}}k 4f};o $Q=m(){o 1l=1b;B(!1l[1])1l=[c,1l[0]];M(o I 1e 1l[1])1l[0][I]=1l[1][I];k 1l[0]};o $4d=m(){M(o i=0,l=1b.V;i<l;i++){1b[i].Q=m(1N){M(o 1T 1e 1N){B(!c.1x[1T])c.1x[1T]=1N[1T];B(!c[1T])c[1T]=$4d.6c(1T)}}}};$4d.6c=m(1T){k m(17){k c.1x[1T].3t(17,2j.1x.8K.1X(1b,1))}};$4d(7B,2j,6g,9P);m $2w(N){k!!(N||N===0)};m $4F(N,7U){k $5B(N)?N:7U};m $6X(2X,1L){k 1c.8s(1c.6X()*(1L-2X+1)+2X)};m $33(){k O 9z().9Q()};m $6J(2b){b5(2b);b4(2b);k 1k};o 3d=m(N){N=N||{};N.Q=$Q;k N};o b8=O 3d(W);o bm=O 3d(R);R.67=R.2G(\'67\')[0];W.3B=!!(R.54);B(W.9a)W.2s=W[W.66?\'aV\':\'9E\']=1g;19 B(R.8X&&!R.bj&&!ai.a3)W.3L=W[W.3B?\'a7\':\'5T\']=1g;19 B(R.aG!=1k)W.7f=1g;W.ax=W.3L;6Y.Q=$Q;B(5X 5j==\'9e\'){o 5j=m(){};B(W.3L)R.9V("aO");5j.1x=(W.3L)?W["[[aW.1x]]"]:{}}5j.1x.4t=m(){};B(W.9E)49{R.aT("aA",U,1g)}48(e){};o 1f=m(1y){o 4V=m(){k(1b[0]!==1k&&c.1w&&$G(c.1w)==\'m\')?c.1w.3t(c,1b):c};$Q(4V,c);4V.1x=1y;4V.7X=1f;k 4V};1f.1r=m(){};1f.1x={Q:m(1y){o 68=O c(1k);M(o I 1e 1y){o 8c=68[I];68[I]=1f.86(8c,1y[I])}k O 1f(68)},56:m(){M(o i=0,l=1b.V;i<l;i++)$Q(c.1x,1b[i])}};1f.86=m(3y,2a){B(3y&&3y!=2a){o G=$G(2a);B(G!=$G(3y))k 2a;21(G){Y\'m\':o 7q=m(){c.1o=1b.7b.1o;k 2a.3t(c,1b)};7q.1o=3y;k 7q;Y\'2t\':k $1Q(3y,2a)}}k 2a};o 6G=O 1f({af:m(T){c.3Y=c.3Y||[];c.3Y.1i(T);k c},7h:m(){B(c.3Y&&c.3Y.V)c.3Y.8I().2q(10,c)},bn:m(){c.3Y=[]}});o 2A=O 1f({29:m(G,T){B(T!=1f.1r){c.$1a=c.$1a||{};c.$1a[G]=c.$1a[G]||[];c.$1a[G].6q(T)}k c},1v:m(G,1l,2q){B(c.$1a&&c.$1a[G]){c.$1a[G].1z(m(T){T.2L({\'17\':c,\'2q\':2q,\'1b\':1l})()},c)}k c},4m:m(G,T){B(c.$1a&&c.$1a[G])c.$1a[G].2O(T);k c}});o 6a=O 1f({3Z:m(){c.C=$1Q.3t(1k,[c.C].Q(1b));B(c.29){M(o 35 1e c.C){B($G(c.C[35]==\'m\')&&(/^51[A-Z]/).2N(35))c.29(35,c.C[35])}}k c}});2j.Q({61:m(T,17){M(o i=0,j=c.V;i<j;i++)T.1X(17,c[i],i,c)},2R:m(T,17){o 4j=[];M(o i=0,j=c.V;i<j;i++){B(T.1X(17,c[i],i,c))4j.1i(c[i])}k 4j},2y:m(T,17){o 4j=[];M(o i=0,j=c.V;i<j;i++)4j[i]=T.1X(17,c[i],i,c);k 4j},5E:m(T,17){M(o i=0,j=c.V;i<j;i++){B(!T.1X(17,c[i],i,c))k U}k 1g},aL:m(T,17){M(o i=0,j=c.V;i<j;i++){B(T.1X(17,c[i],i,c))k 1g}k U},4n:m(2U,12){o 4v=c.V;M(o i=(12<0)?1c.1L(0,4v+12):12||0;i<4v;i++){B(c[i]===2U)k i}k-1},6Z:m(1q,V){1q=1q||0;B(1q<0)1q=c.V+1q;V=V||(c.V-1q);o 6z=[];M(o i=0;i<V;i++)6z[i]=c[1q++];k 6z},2O:m(2U){o i=0;o 4v=c.V;62(i<4v){B(c[i]===2U){c.5m(i,1);4v--}19{i++}}k c},1j:m(2U,12){k c.4n(2U,12)!=-1},aN:m(1G){o N={},V=1c.2X(c.V,1G.V);M(o i=0;i<V;i++)N[1G[i]]=c[i];k N},Q:m(1u){M(o i=0,j=1u.V;i<j;i++)c.1i(1u[i]);k c},1Q:m(1u){M(o i=0,l=1u.V;i<l;i++)c.6q(1u[i]);k c},6q:m(2U){B(!c.1j(2U))c.1i(2U);k c},b0:m(){k c[$6X(0,c.V-1)]||1k},7p:m(){k c[c.V-1]||1k}});2j.1x.1z=2j.1x.61;2j.1z=2j.61;m $A(1u){k 2j.6Z(1u)};m $1z(3o,T,17){B(3o&&5X 3o.V==\'3P\'&&$G(3o)!=\'2t\'){2j.61(3o,T,17)}19{M(o 1p 1e 3o)T.1X(17||3o,3o[1p],1p)}};2j.1x.2N=2j.1x.1j;6g.Q({2N:m(6e,2z){k(($G(6e)==\'2h\')?O 7u(6e,2z):6e).2N(c)},2P:m(){k 4X(c,10)},9A:m(){k 4T(c)},7I:m(){k c.31(/-\\D/g,m(2M){k 2M.6T(1).7D()})},8U:m(){k c.31(/\\w[A-Z]/g,m(2M){k(2M.6T(0)+\'-\'+2M.6T(1).4S())})},7S:m(){k c.31(/\\b[a-z]/g,m(2M){k 2M.7D()})},6y:m(){k c.31(/^\\s+|\\s+$/g,\'\')},7x:m(){k c.31(/\\s{2,}/g,\' \').6y()},52:m(1u){o 1m=c.2M(/\\d{1,3}/g);k(1m)?1m.52(1u):U},57:m(1u){o 3i=c.2M(/^#?(\\w{1,2})(\\w{1,2})(\\w{1,2})$/);k(3i)?3i.8K(1).57(1u):U},1j:m(2h,s){k(s)?(s+c+s).4n(s+2h+s)>-1:c.4n(2h)>-1},84:m(){k c.31(/([.*+?^${}()|[\\]\\/\\\\])/g,\'\\\\$1\')}});2j.Q({52:m(1u){B(c.V<3)k U;B(c.V==4&&c[3]==0&&!1u)k\'ba\';o 3i=[];M(o i=0;i<3;i++){o 4B=(c[i]-0).3F(16);3i.1i((4B.V==1)?\'0\'+4B:4B)}k 1u?3i:\'#\'+3i.1V(\'\')},57:m(1u){B(c.V!=3)k U;o 1m=[];M(o i=0;i<3;i++){1m.1i(4X((c[i].V==1)?c[i]+c[i]:c[i],16))}k 1u?1m:\'1m(\'+1m.1V(\',\')+\')\'}});7B.Q({2L:m(C){o T=c;C=$1Q({\'17\':T,\'K\':U,\'1b\':1k,\'2q\':U,\'3G\':U,\'6n\':U},C);B($2w(C.1b)&&$G(C.1b)!=\'1u\')C.1b=[C.1b];k m(K){o 1l;B(C.K){K=K||W.K;1l=[(C.K===1g)?K:O C.K(K)];B(C.1b)1l.Q(C.1b)}19 1l=C.1b||1b;o 3j=m(){k T.3t($4F(C.17,T),1l)};B(C.2q)k 9G(3j,C.2q);B(C.3G)k aa(3j,C.3G);B(C.6n)49{k 3j()}48(aF){k U};k 3j()}},aq:m(1l,17){k c.2L({\'1b\':1l,\'17\':17})},6n:m(1l,17){k c.2L({\'1b\':1l,\'17\':17,\'6n\':1g})()},17:m(17,1l){k c.2L({\'17\':17,\'1b\':1l})},ak:m(17,1l){k c.2L({\'17\':17,\'K\':1g,\'1b\':1l})},2q:m(2q,17,1l){k c.2L({\'2q\':2q,\'17\':17,\'1b\':1l})()},3G:m(9M,17,1l){k c.2L({\'3G\':9M,\'17\':17,\'1b\':1l})()}});9P.Q({2P:m(){k 4X(c)},9A:m(){k 4T(c)},1M:m(2X,1L){k 1c.2X(1L,1c.1L(2X,c))},2c:m(5d){5d=1c.36(10,5d||0);k 1c.2c(c*5d)/5d},b7:m(T){M(o i=0;i<c;i++)T(i)}});o P=O 1f({1w:m(F,1N){B($G(F)==\'2h\'){B(W.2s&&1N&&(1N.1p||1N.G)){o 1p=(1N.1p)?\' 1p="\'+1N.1p+\'"\':\'\';o G=(1N.G)?\' G="\'+1N.G+\'"\':\'\';4p 1N.1p;4p 1N.G;F=\'<\'+F+1p+G+\'>\'}F=R.9V(F)}F=$(F);k(!1N||!F)?F:F.26(1N)}});o 1R=O 1f({1w:m(15){k(15)?$Q(15,c):c}});1R.Q=m(1N){M(o 1T 1e 1N){c.1x[1T]=1N[1T];c[1T]=$4d.6c(1T)}};m $(F){B(!F)k 1k;B(F.4t)k 2n.4q(F);B([W,R].1j(F))k F;o G=$G(F);B(G==\'2h\'){F=R.5Q(F);G=(F)?\'L\':U}B(G!=\'L\')k 1k;B(F.4t)k 2n.4q(F);B([\'2t\',\'b3\'].1j(F.5M.4S()))k F;$Q(F,P.1x);F.4t=m(){};k 2n.4q(F)};R.5P=R.2G;m $$(){o 15=[];M(o i=0,j=1b.V;i<j;i++){o 1J=1b[i];21($G(1J)){Y\'L\':15.1i(1J);Y\'b2\':1B;Y U:1B;Y\'2h\':1J=R.5P(1J,1g);5Z:15.Q(1J)}}k $$.4U(15)};$$.4U=m(1u){o 15=[];M(o i=0,l=1u.V;i<l;i++){B(1u[i].$64)5L;o L=$(1u[i]);B(L&&!L.$64){L.$64=1g;15.1i(L)}}M(o n=0,d=15.V;n<d;n++)15[n].$64=1k;k O 1R(15)};1R.5G=m(I){k m(){o 1l=1b;o 1t=[];o 15=1g;M(o i=0,j=c.V,3j;i<j;i++){3j=c[i][I].3t(c[i],1l);B($G(3j)!=\'L\')15=U;1t.1i(3j)};k(15)?$$.4U(1t):1t}};P.Q=m(1y){M(o I 1e 1y){5j.1x[I]=1y[I];P.1x[I]=1y[I];P[I]=$4d.6c(I);o 97=(2j.1x[I])?I+\'1R\':I;1R.1x[97]=1R.5G(I)}};P.Q({26:m(1N){M(o 1T 1e 1N){o 3E=1N[1T];21(1T){Y\'90\':c.7w(3E);1B;Y\'1a\':B(c.65)c.65(3E);1B;Y\'1y\':c.6f(3E);1B;5Z:c.5J(1T,3E)}}k c},34:m(F,8M){F=$(F);21(8M){Y\'9m\':F.2Y.6B(c,F);1B;Y\'9r\':o 4D=F.8Q();B(!4D)F.2Y.7m(c);19 F.2Y.6B(c,4D);1B;Y\'1E\':o 6C=F.6H;B(6C){F.6B(c,6C);1B}5Z:F.7m(c)}k c},bB:m(F){k c.34(F,\'9m\')},92:m(F){k c.34(F,\'9r\')},ae:m(F){k c.34(F,\'4I\')},aj:m(F){k c.34(F,\'1E\')},93:m(){o 15=[];$1z(1b,m(9s){15=15.6F(9s)});$$(15).34(c);k c},2O:m(){k c.2Y.9L(c)},a4:m(9c){o F=$(c.ag(9c!==U));B(!F.$1a)k F;F.$1a={};M(o G 1e c.$1a)F.$1a[G]={\'1G\':$A(c.$1a[G].1G),\'1A\':$A(c.$1a[G].1A)};k F.5v()},az:m(F){F=$(F);c.2Y.am(F,c);k F},80:m(1I){c.7m(R.av(1I));k c},7r:m(1F){k c.1F.1j(1F,\' \')},9f:m(1F){B(!c.7r(1F))c.1F=(c.1F+\' \'+1F).7x();k c},9g:m(1F){c.1F=c.1F.31(O 7u(\'(^|\\\\s)\'+1F+\'(?:\\\\s|$)\'),\'$1\').7x();k c},aD:m(1F){k c.7r(1F)?c.9g(1F):c.9f(1F)},30:m(I,J){21(I){Y\'2p\':k c.9n(4T(J));Y\'aB\':I=(W.2s)?\'ah\':\'ab\'}I=I.7I();21($G(J)){Y\'3P\':B(![\'bi\',\'99\'].1j(I))J+=\'4x\';1B;Y\'1u\':J=\'1m(\'+J.1V(\',\')+\')\'}c.1D[I]=J;k c},7w:m(1O){21($G(1O)){Y\'2t\':P.5n(c,\'30\',1O);1B;Y\'2h\':c.1D.77=1O}k c},9n:m(2p){B(2p==0){B(c.1D.5C!="5r")c.1D.5C="5r"}19{B(c.1D.5C!="9o")c.1D.5C="9o"}B(!c.5V||!c.5V.bf)c.1D.99=1;B(W.2s)c.1D.2R=(2p==1)?\'\':"6l(2p="+2p*3w+")";c.1D.2p=c.$3q.2p=2p;k c},1Z:m(I){I=I.7I();o 1C=c.1D[I];B(!$2w(1C)){B(I==\'2p\')k c.$3q.2p;1C=[];M(o 1D 1e P.3s){B(I==1D){P.3s[1D].1z(m(s){o 1D=c.1Z(s);1C.1i(4X(1D)?1D:\'8d\')},c);B(I==\'3p\'){o 5E=1C.5E(m(4B){k(4B==1C[0])});k(5E)?1C[0]:U}k 1C.1V(\' \')}}B(I.1j(\'3p\')){B(P.3s.3p.1j(I)){k[\'7T\',\'6O\',\'2x\'].2y(m(p){k c.1Z(I+p)},c).1V(\' \')}19 B(P.7N.1j(I)){k[\'8J\',\'8H\',\'8n\',\'8p\'].2y(m(p){k c.1Z(\'3p\'+p+I.31(\'3p\',\'\'))},c).1V(\' \')}}B(R.8S)1C=R.8S.bA(c,1k).bt(I.8U());19 B(c.5V)1C=c.5V[I]}B(W.2s)1C=P.7Y(I,1C,c);B(1C&&I.2N(/2o/i)&&1C.1j(\'1m\')){k 1C.5D(\'1m\').5m(1,4).2y(m(2o){k 2o.52()}).1V(\' \')}k 1C},8Z:m(){k P.7J(c,\'1Z\',1b)},4J:m(5I,1q){5I+=\'b9\';o F=(1q)?c[1q]:c[5I];62(F&&$G(F)!=\'L\')F=F[5I];k $(F)},aS:m(){k c.4J(\'3y\')},8Q:m(){k c.4J(\'4D\')},aU:m(){k c.4J(\'4D\',\'6H\')},7p:m(){k c.4J(\'3y\',\'aK\')},aJ:m(){k $(c.2Y)},aM:m(){k $$(c.8X)},7a:m(F){k!!$A(c.2G(\'*\')).1j(F)},5b:m(I){o 3l=P.5O[I];B(3l)k c[3l];o 6w=P.8r[I]||0;B(!W.2s||6w)k c.b6(I,6w);o 6K=c.aX[I];k(6K)?6K.91:1k},b1:m(I){o 3l=P.5O[I];B(3l)c[3l]=\'\';19 c.aZ(I);k c},aY:m(){k P.7J(c,\'5b\',1b)},5J:m(I,J){o 3l=P.5O[I];B(3l)c[3l]=J;19 c.bz(I,J);k c},6f:m(1O){k P.5n(c,\'5J\',1O)},72:m(){c.7Q=$A(1b).1V(\'\');k c},by:m(1I){o 2T=c.4w();B([\'1D\',\'2f\'].1j(2T)){B(W.2s){B(2T==\'1D\')c.8a.77=1I;19 B(2T==\'2f\')c.5J(\'1I\',1I);k c}19{c.9L(c.6H);k c.80(1I)}}c[$5B(c.73)?\'73\':\'7M\']=1I;k c},a2:m(){o 2T=c.4w();B([\'1D\',\'2f\'].1j(2T)){B(W.2s){B(2T==\'1D\')k c.8a.77;19 B(2T==\'2f\')k c.5b(\'1I\')}19{k c.7Q}}k($4F(c.73,c.7M))},4w:m(){k c.5M.4S()},1r:m(){2n.5u(c.2G(\'*\'));k c.72(\'\')}});P.7Y=m(I,1C,L){B($2w(4X(1C)))k 1C;B([\'3f\',\'2H\'].1j(I)){o 1A=(I==\'2H\')?[\'1H\',\'4H\']:[\'1E\',\'4I\'];o 3S=0;1A.1z(m(J){3S+=L.1Z(\'3p-\'+J+\'-2H\').2P()+L.1Z(\'6Q-\'+J).2P()});k L[\'3n\'+I.7S()]-3S+\'4x\'}19 B(I.2N(/3p(.+)7T|2J|6Q/)){k\'8d\'}k 1C};P.3s={\'3p\':[],\'6Q\':[],\'2J\':[]};[\'8J\',\'8H\',\'8n\',\'8p\'].1z(m(7R){M(o 1D 1e P.3s)P.3s[1D].1i(1D+7R)});P.7N=[\'aP\',\'aQ\',\'aR\'];P.7J=m(F,1P,1G){o 1C={};$1z(1G,m(1n){1C[1n]=F[1P](1n)});k 1C};P.5n=m(F,1P,7E){M(o 1n 1e 7E)F[1P](1n,7E[1n]);k F};P.5O=O 3d({\'7F\':\'1F\',\'M\':\'bu\',\'bs\':\'bp\',\'bq\':\'bv\',\'bx\':\'be\',\'bd\':\'bb\',\'bc\':\'bg\',\'bh\':\'aI\',\'bl\':\'bk\',\'J\':\'J\',\'6U\':\'6U\',\'6P\':\'6P\',\'6W\':\'6W\',\'74\':\'74\'});P.8r={\'7O\':2,\'3W\':2};P.2m={5w:{2S:m(G,T){B(c.7c)c.7c(G,T,U);19 c.a5(\'51\'+G,T);k c},4h:m(G,T){B(c.8u)c.8u(G,T,U);19 c.aH(\'51\'+G,T);k c}}};W.Q(P.2m.5w);R.Q(P.2m.5w);P.Q(P.2m.5w);o 2n={15:[],4q:m(F){B(!F.$3q){2n.15.1i(F);F.$3q={\'2p\':1}}k F},5u:m(15){M(o i=0,j=15.V,F;i<j;i++){B(!(F=15[i])||!F.$3q)5L;B(F.$1a)F.1v(\'5u\').5v();M(o p 1e F.$3q)F.$3q[p]=1k;M(o d 1e P.1x)F[d]=1k;2n.15[2n.15.4n(F)]=1k;F.4t=F.$3q=F=1k}2n.15.2O(1k)},1r:m(){2n.4q(W);2n.4q(R);2n.5u(2n.15)}};W.2S(\'8m\',m(){W.2S(\'7H\',2n.1r);B(W.2s)W.2S(\'7H\',aC)});o 2E=O 1f({1w:m(K){B(K&&K.$8G)k K;c.$8G=1g;K=K||W.K;c.K=K;c.G=K.G;c.3m=K.3m||K.aE;B(c.3m.7v==3)c.3m=c.3m.2Y;c.8I=K.ao;c.an=K.au;c.as=K.at;c.ar=K.aw;B([\'7j\',\'43\'].1j(c.G)){c.a1=(K.87)?K.87/ad:-(K.ac||0)/3}19 B(c.G.1j(\'1n\')){c.5k=K.7V||K.al;M(o 1p 1e 2E.1G){B(2E.1G[1p]==c.5k){c.1n=1p;1B}}B(c.G==\'8o\'){o 5p=c.5k-ca;B(5p>0&&5p<13)c.1n=\'f\'+5p}c.1n=c.1n||6g.dp(c.5k).4S()}19 B(c.G.2N(/(8t|2Z|dq)/)){c.4k={\'x\':K.7n||K.7Z+R.2D.4Y,\'y\':K.7s||K.7P+R.2D.59};c.dr={\'x\':K.7n?K.7n-W.85:K.7Z,\'y\':K.7s?K.7s-W.8b:K.7P};c.dn=(K.7V==3)||(K.dm==2);21(c.G){Y\'7z\':c.28=K.28||K.dj;1B;Y\'7L\':c.28=K.28||K.9w}c.8B()}k c},1S:m(){k c.5y().5t()},5y:m(){B(c.K.5y)c.K.5y();19 c.K.dk=1g;k c},5t:m(){B(c.K.5t)c.K.5t();19 c.K.dl=U;k c}});2E.5s={28:m(){B(c.28&&c.28.7v==3)c.28=c.28.2Y},8z:m(){49{2E.5s.28.1X(c)}48(e){c.28=c.3m}}};2E.1x.8B=(W.7f)?2E.5s.8z:2E.5s.28;2E.1G=O 3d({\'ds\':13,\'dt\':38,\'dz\':40,\'1H\':37,\'4H\':39,\'dA\':27,\'dy\':32,\'dx\':8,\'du\':9,\'4p\':46});P.2m.2A={29:m(G,T){c.$1a=c.$1a||{};c.$1a[G]=c.$1a[G]||{\'1G\':[],\'1A\':[]};B(c.$1a[G].1G.1j(T))k c;c.$1a[G].1G.1i(T);o 5q=G;o 2d=P.2A[G];B(2d){B(2d.6N)2d.6N.1X(c,T);B(2d.2y)T=2d.2y;B(2d.G)5q=2d.G}B(!c.7c)T=T.2L({\'17\':c,\'K\':1g});c.$1a[G].1A.1i(T);k(P.7k.1j(5q))?c.2S(5q,T):c},4m:m(G,T){B(!c.$1a||!c.$1a[G])k c;o 2e=c.$1a[G].1G.4n(T);B(2e==-1)k c;o 1n=c.$1a[G].1G.5m(2e,1)[0];o J=c.$1a[G].1A.5m(2e,1)[0];o 2d=P.2A[G];B(2d){B(2d.2O)2d.2O.1X(c,T);B(2d.G)G=2d.G}k(P.7k.1j(G))?c.4h(G,J):c},65:m(1O){k P.5n(c,\'29\',1O)},5v:m(G){B(!c.$1a)k c;B(!G){M(o 5U 1e c.$1a)c.5v(5U);c.$1a=1k}19 B(c.$1a[G]){c.$1a[G].1G.1z(m(T){c.4m(G,T)},c);c.$1a[G]=1k}k c},1v:m(G,1l,2q){B(c.$1a&&c.$1a[G]){c.$1a[G].1G.1z(m(T){T.2L({\'17\':c,\'2q\':2q,\'1b\':1l})()},c)}k c},8j:m(12,G){B(!12.$1a)k c;B(!G){M(o 5U 1e 12.$1a)c.8j(12,5U)}19 B(12.$1a[G]){12.$1a[G].1G.1z(m(T){c.29(G,T)},c)}k c}};W.Q(P.2m.2A);R.Q(P.2m.2A);P.Q(P.2m.2A);P.2A=O 3d({\'8i\':{G:\'7z\',2y:m(K){K=O 2E(K);B(K.28!=c&&!c.7a(K.28))c.1v(\'8i\',K)}},\'8h\':{G:\'7L\',2y:m(K){K=O 2E(K);B(K.28!=c&&!c.7a(K.28))c.1v(\'8h\',K)}},\'43\':{G:(W.7f)?\'7j\':\'43\'}});P.7k=[\'8t\',\'dv\',\'7l\',\'7e\',\'43\',\'7j\',\'7z\',\'7L\',\'4g\',\'8o\',\'dw\',\'di\',\'3C\',\'7H\',\'8m\',\'dh\',\'d4\',\'d5\',\'d6\',\'9H\',\'d3\',\'d2\',\'3z\',\'8l\',\'79\',\'cZ\',\'45\'];7B.Q({5K:m(17,1l){k c.2L({\'17\':17,\'1b\':1l,\'K\':2E})}});1R.Q({d0:m(2T){k O 1R(c.2R(m(F){k(P.4w(F)==2T)}))},8e:m(1F,2l){o 15=c.2R(m(F){k(F.1F&&F.1F.1j(1F,\' \'))});k(2l)?15:O 1R(15)},8k:m(3D,2l){o 15=c.2R(m(F){k(F.3D==3D)});k(2l)?15:O 1R(15)},89:m(1p,7G,J,2l){o 15=c.2R(m(F){o 2a=P.5b(F,1p);B(!2a)k U;B(!7G)k 1g;21(7G){Y\'=\':k(2a==J);Y\'*=\':k(2a.1j(J));Y\'^=\':k(2a.8C(0,J.V)==J);Y\'$=\':k(2a.8C(2a.V-J.V)==J);Y\'!=\':k(2a!=J);Y\'~=\':k 2a.1j(J,\' \')}k U});k(2l)?15:O 1R(15)}});m $E(1J,2R){k($(2R)||R).8y(1J)};m $d1(1J,2R){k($(2R)||R).5P(1J)};$$.3c={\'5e\':/^(\\w*|\\*)(?:#([\\w-]+)|\\.([\\w-]+))?(?:\\[(\\w+)(?:([!*^$]?=)["\']?([^"\'\\]]*)["\']?)?])?$/,\'3B\':{6t:m(1t,2Q,1d,i){o 2v=[2Q.d7?\'78:\':\'\',1d[1]];B(1d[2])2v.1i(\'[@3D="\',1d[2],\'"]\');B(1d[3])2v.1i(\'[1j(6F(" ", @7F, " "), " \',1d[3],\' ")]\');B(1d[4]){B(1d[5]&&1d[6]){21(1d[5]){Y\'*=\':2v.1i(\'[1j(@\',1d[4],\', "\',1d[6],\'")]\');1B;Y\'^=\':2v.1i(\'[d8-de(@\',1d[4],\', "\',1d[6],\'")]\');1B;Y\'$=\':2v.1i(\'[df(@\',1d[4],\', 2h-V(@\',1d[4],\') - \',1d[6].V,\' + 1) = "\',1d[6],\'"]\');1B;Y\'=\':2v.1i(\'[@\',1d[4],\'="\',1d[6],\'"]\');1B;Y\'!=\':2v.1i(\'[@\',1d[4],\'!="\',1d[6],\'"]\')}}19{2v.1i(\'[@\',1d[4],\']\')}}1t.1i(2v.1V(\'\'));k 1t},6x:m(1t,2Q,2l){o 15=[];o 3B=R.54(\'.//\'+1t.1V(\'//\'),2Q,$$.3c.88,dC.dd,1k);M(o i=0,j=3B.dc;i<j;i++)15.1i(3B.d9(i));k(2l)?15:O 1R(15.2y($))}},\'8g\':{6t:m(1t,2Q,1d,i){B(i==0){B(1d[2]){o F=2Q.5Q(1d[2]);B(!F||((1d[1]!=\'*\')&&(P.4w(F)!=1d[1])))k U;1t=[F]}19{1t=$A(2Q.2G(1d[1]))}}19{1t=$$.3c.2G(1t,1d[1]);B(1d[2])1t=1R.8k(1t,1d[2],1g)}B(1d[3])1t=1R.8e(1t,1d[3],1g);B(1d[4])1t=1R.89(1t,1d[4],1d[5],1d[6],1g);k 1t},6x:m(1t,2Q,2l){k(2l)?1t:$$.4U(1t)}},88:m(7W){k(7W==\'78\')?\'da://9k.db.dB/dK/78\':U},2G:m(2Q,5M){o 6D=[];M(o i=0,j=2Q.V;i<j;i++)6D.Q(2Q[i].2G(5M));k 6D}};$$.3c.1P=(W.3B)?\'3B\':\'8g\';P.2m.76={5S:m(1J,2l){o 1t=[];1J=1J.6y().5D(\' \');M(o i=0,j=1J.V;i<j;i++){o 8q=1J[i];o 1d=8q.2M($$.3c.5e);B(!1d)1B;1d[1]=1d[1]||\'*\';o 2v=$$.3c[$$.3c.1P].6t(1t,c,1d,i);B(!2v)1B;1t=2v}k $$.3c[$$.3c.1P].6x(1t,c,2l)},8y:m(1J){k $(c.5S(1J,1g)[0]||U)},5P:m(1J,2l){o 15=[];1J=1J.5D(\',\');M(o i=0,j=1J.V;i<j;i++)15=15.6F(c.5S(1J[i],1g));k(2l)?15:$$.4U(15)}};P.Q({5Q:m(3D){o F=R.5Q(3D);B(!F)k U;M(o 1o=F.2Y;1o!=c;1o=1o.2Y){B(!1o)k U}k F},dW:m(1F){k c.5S(\'.\'+1F)}});R.Q(P.2m.76);P.Q(P.2m.76);P.Q({3v:m(){21(c.4w()){Y\'3z\':o 1A=[];$1z(c.C,m(35){B(35.74)1A.1i($4F(35.J,35.1I))});k(c.6W)?1A:1A[0];Y\'8D\':B(!(c.6P&&[\'dT\',\'dU\'].1j(c.G))&&![\'5r\',\'1I\',\'e1\'].1j(c.G))1B;Y\'8w\':k c.J}k U},8f:m(){k $$(c.2G(\'8D\'),c.2G(\'3z\'),c.2G(\'8w\'))},5c:m(){o 47=[];c.8f().1z(m(F){o 1p=F.1p;o J=F.3v();B(J===U||!1p||F.6U)k;o 6S=m(3E){47.1i(1p+\'=\'+6m(3E))};B($G(J)==\'1u\')J.1z(6S);19 6S(J)});k 47.1V(\'&\')}});P.Q({3x:m(x,y){c.4Y=x;c.59=y},6L:m(){k{\'45\':{\'x\':c.4Y,\'y\':c.59},\'3S\':{\'x\':c.4L,\'y\':c.4G},\'6M\':{\'x\':c.5A,\'y\':c.5H}}},3Q:m(22){22=22||[];o F=c,1H=0,1E=0;do{1H+=F.e6||0;1E+=F.e7||0;F=F.e2}62(F);22.1z(m(L){1H-=L.4Y||0;1E-=L.59||0});k{\'x\':1H,\'y\':1E}},9i:m(22){k c.3Q(22).y},9h:m(22){k c.3Q(22).x},6j:m(22){o 2i=c.3Q(22);o N={\'2H\':c.4L,\'3f\':c.4G,\'1H\':2i.x,\'1E\':2i.y};N.4H=N.1H+N.2H;N.4I=N.1E+N.3f;k N}});P.2A.6r={6N:m(T){B(W.5R){T.1X(c);k}o 4Z=m(){B(W.5R)k;W.5R=1g;W.2b=$6J(W.2b);c.1v(\'6r\')}.17(c);B(R.4u&&W.3L){W.2b=m(){B([\'5R\',\'6v\'].1j(R.4u))4Z()}.3G(50)}19 B(R.4u&&W.2s){B(!$(\'6s\')){o 3W=(W.dV.dR==\'dH:\')?\'://0\':\'70:dS(0)\';R.dI(\'<2f 3D="6s" dG 3W="\'+3W+\'"><\\/2f>\');$(\'6s\').69=m(){B(c.4u==\'6v\')4Z()}}}19{W.2S("3C",4Z);R.2S("dF",4Z)}}};W.dJ=m(T){k c.29(\'6r\',T)};W.Q({8L:m(){B(c.5T)k c.dP;B(c.82)k R.5F.81;k R.2D.81},9Y:m(){B(c.5T)k c.dQ;B(c.82)k R.5F.83;k R.2D.83},9S:m(){B(c.2s)k 1c.1L(R.2D.4L,R.2D.5A);B(c.3L)k R.5F.5A;k R.2D.5A},9F:m(){B(c.2s)k 1c.1L(R.2D.4G,R.2D.5H);B(c.3L)k R.5F.5H;k R.2D.5H},9D:m(){k c.85||R.2D.4Y},9T:m(){k c.8b||R.2D.59},6L:m(){k{\'3S\':{\'x\':c.8L(),\'y\':c.9Y()},\'6M\':{\'x\':c.9S(),\'y\':c.9F()},\'45\':{\'x\':c.9D(),\'y\':c.9T()}}},3Q:m(){k{\'x\':0,\'y\':0}}});o 1h={};1h.2F=O 1f({C:{4P:1f.1r,25:1f.1r,6I:1f.1r,1W:m(p){k-(1c.9p(1c.7C*p)-1)/2},3r:dN,2k:\'4x\',44:1g,9R:50},1w:m(C){c.L=c.L||1k;c.3Z(C);B(c.C.1w)c.C.1w.1X(c)},9I:m(){o 33=$33();B(33<c.33+c.C.3r){c.3R=c.C.1W((33-c.33)/c.C.3r);c.3N();c.3V()}19{c.1S(1g);c.26(c.14);c.1v(\'25\',c.L,10);c.7h()}},26:m(14){c.18=14;c.3V();k c},3N:m(){c.18=c.3J(c.12,c.14)},3J:m(12,14){k(14-12)*c.3R+12},1q:m(12,14){B(!c.C.44)c.1S();19 B(c.2b)k c;c.12=12;c.14=14;c.9H=c.14-c.12;c.33=$33();c.2b=c.9I.3G(1c.2c(8A/c.C.9R),c);c.1v(\'4P\',c.L);k c},1S:m(5N){B(!c.2b)k c;c.2b=$6J(c.2b);B(!5N)c.1v(\'6I\',c.L);k c},2d:m(12,14){k c.1q(12,14)},dM:m(5N){k c.1S(5N)}});1h.2F.56(O 6G,O 2A,O 6a);1h.2W={3z:m(I,14){B(I.2N(/2o/i))k c.2x;o G=$G(14);B((G==\'1u\')||(G==\'2h\'&&14.1j(\' \')))k c.5G;k c.9K},2B:m(F,I,4l){B(!4l.1i)4l=[4l];o 12=4l[0],14=4l[1];B(!$2w(14)){14=12;12=F.1Z(I)}o 1s=c.3z(I,14);k{\'12\':1s.2B(12),\'14\':1s.2B(14),\'1s\':1s}}};1h.2W.9K={2B:m(J){k 4T(J)},4b:m(12,14,4c){k 4c.3J(12,14)},3v:m(J,2k,I){B(2k==\'4x\'&&I!=\'2p\')J=1c.2c(J);k J+2k}};1h.2W.5G={2B:m(J){k J.1i?J:J.5D(\' \').2y(m(v){k 4T(v)})},4b:m(12,14,4c){o 18=[];M(o i=0;i<12.V;i++)18[i]=4c.3J(12[i],14[i]);k 18},3v:m(J,2k,I){B(2k==\'4x\'&&I!=\'2p\')J=J.2y(1c.2c);k J.1V(2k+\' \')+2k}};1h.2W.2x={2B:m(J){k J.1i?J:J.57(1g)},4b:m(12,14,4c){o 18=[];M(o i=0;i<12.V;i++)18[i]=1c.2c(4c.3J(12[i],14[i]));k 18},3v:m(J){k\'1m(\'+J.1V(\',\')+\')\'}};1h.6O=1h.2F.Q({1w:m(F,I,C){c.L=$(F);c.I=I;c.1o(C)},94:m(){k c.26(0)},3N:m(){c.18=c.1s.4b(c.12,c.14,c)},26:m(14){c.1s=1h.2W.3z(c.I,14);k c.1o(c.1s.2B(14))},1q:m(12,14){B(c.2b&&c.C.44)k c;o 1U=1h.2W.2B(c.L,c.I,[12,14]);c.1s=1U.1s;k c.1o(1U.12,1U.14)},3V:m(){c.L.30(c.I,c.1s.3v(c.18,c.C.2k,c.I))}});P.Q({dO:m(I,C){k O 1h.6O(c,I,C)}});1h.3s=1h.2F.Q({1w:m(F,C){c.L=$(F);c.1o(C)},3N:m(){M(o p 1e c.12)c.18[p]=c.1s[p].4b(c.12[p],c.14[p],c)},26:m(14){o 1U={};c.1s={};M(o p 1e 14){c.1s[p]=1h.2W.3z(p,14[p]);1U[p]=c.1s[p].2B(14[p])}k c.1o(1U)},1q:m(N){B(c.2b&&c.C.44)k c;c.18={};c.1s={};o 12={},14={};M(o p 1e N){o 1U=1h.2W.2B(c.L,p,N[p]);12[p]=1U.12;14[p]=1U.14;c.1s[p]=1U.1s}k c.1o(12,14)},3V:m(){M(o p 1e c.18)c.L.30(p,c.1s[p].3v(c.18[p],c.C.2k,p))}});P.Q({dE:m(C){k O 1h.3s(c,C)}});1h.1R=1h.2F.Q({1w:m(15,C){c.15=$$(15);c.1o(C)},3N:m(){M(o i 1e c.12){o 5f=c.12[i],3u=c.14[i],3e=c.1s[i],5g=c.18[i]={};M(o p 1e 5f)5g[p]=3e[p].4b(5f[p],3u[p],c)}},26:m(14){o 1U={};c.1s={};M(o i 1e 14){o 3u=14[i],3e=c.1s[i]={},9y=1U[i]={};M(o p 1e 3u){3e[p]=1h.2W.3z(p,3u[p]);9y[p]=3e[p].2B(3u[p])}}k c.1o(1U)},1q:m(N){B(c.2b&&c.C.44)k c;c.18={};c.1s={};o 12={},14={};M(o i 1e N){o 6R=N[i],5f=12[i]={},3u=14[i]={},3e=c.1s[i]={};M(o p 1e 6R){o 1U=1h.2W.2B(c.15[i],p,6R[p]);5f[p]=1U.12;3u[p]=1U.14;3e[p]=1U.1s}}k c.1o(12,14)},3V:m(){M(o i 1e c.18){o 5g=c.18[i],3e=c.1s[i];M(o p 1e 5g)c.15[i].30(p,3e[p].3v(5g[p],c.C.2k,p))}}});1h.dD=1h.2F.Q({C:{22:[],3n:{\'x\':0,\'y\':0},9W:1g},1w:m(L,C){c.18=[];c.L=$(L);c.2u={\'1S\':c.1S.17(c,U)};c.1o(C);B(c.C.9W){c.29(\'4P\',m(){R.29(\'43\',c.2u.1S)}.17(c));c.29(\'25\',m(){R.4m(\'43\',c.2u.1S)}.17(c))}},3N:m(){M(o i=0;i<2;i++)c.18[i]=c.3J(c.12[i],c.14[i])},3x:m(x,y){B(c.2b&&c.C.44)k c;o F=c.L.6L();o 1A={\'x\':x,\'y\':y};M(o z 1e F.3S){o 1L=F.6M[z]-F.3S[z];B($2w(1A[z]))1A[z]=($G(1A[z])==\'3P\')?1A[z].1M(0,1L):1L;19 1A[z]=F.45[z];1A[z]+=c.C.3n[z]}k c.1q([F.45.x,F.45.y],[1A.x,1A.y])},e3:m(){k c.3x(U,0)},e5:m(){k c.3x(U,\'9N\')},bC:m(){k c.3x(0,U)},e4:m(){k c.3x(\'9N\',U)},9w:m(F){o 1o=c.L.3Q(c.C.22);o 3m=$(F).3Q(c.C.22);k c.3x(3m.x-1o.x,3m.y-1o.y)},3V:m(){c.L.3x(c.18[0],c.18[1])}});1h.e0=1h.2F.Q({C:{23:\'95\'},1w:m(F,C){c.L=$(F);c.3U=O P(\'dX\',{\'90\':$Q(c.L.8Z(\'2J\'),{\'dZ\':\'5r\'})}).92(c.L).93(c.L);c.L.30(\'2J\',0);c.3Z(C);c.18=[];c.1o(c.C);c.4z=1g;c.29(\'25\',m(){c.4z=(c.18[0]===0)});B(W.5T)c.29(\'25\',m(){B(c.4z)c.L.2O().34(c.3U)})},3N:m(){M(o i=0;i<2;i++)c.18[i]=c.3J(c.12[i],c.14[i])},95:m(){c.2J=\'2J-1E\';c.4E=\'3f\';c.3n=c.L.4G},dY:m(){c.2J=\'2J-1H\';c.4E=\'2H\';c.3n=c.L.4L},8W:m(23){c[23||c.C.23]();k c.1q([c.L.1Z(c.2J).2P(),c.3U.1Z(c.4E).2P()],[0,c.3n])},8P:m(23){c[23||c.C.23]();k c.1q([c.L.1Z(c.2J).2P(),c.3U.1Z(c.4E).2P()],[-c.3n,0])},94:m(23){c[23||c.C.23]();c.4z=U;k c.26([-c.3n,0])},dg:m(23){c[23||c.C.23]();c.4z=1g;k c.26([0,c.3n])},cX:m(23){B(c.3U.4G==0||c.3U.4L==0)k c.8W(23);k c.8P(23)},3V:m(){c.L.30(c.2J,c.18[0]+c.C.2k);c.3U.30(c.4E,c.18[1]+c.C.2k)}});1h.7K=m(1W,2z){2z=2z||[];B($G(2z)!=\'1u\')2z=[2z];k $Q(1W,{c4:m(2e){k 1W(2e,2z)},c5:m(2e){k 1-1W(1-2e,2z)},c6:m(2e){k(2e<=0.5)?1W(2*2e,2z)/2:(2-1W(2*(1-2e),2z))/2}})};1h.2V=O 3d({cY:m(p){k p}});1h.2V.Q=m(6A){M(o 1W 1e 6A){1h.2V[1W]=O 1h.7K(6A[1W]);1h.2V.7g(1W)}};1h.2V.7g=m(1W){[\'c2\',\'bY\',\'bZ\'].1z(m(75){1h.2V[1W.4S()+75]=1h.2V[1W][\'c0\'+75]})};1h.2V.Q({c1:m(p,x){k 1c.36(p,x[0]||6)},c7:m(p){k 1c.36(2,8*(p-1))},c8:m(p){k 1-1c.8T(1c.ce(p))},cf:m(p){k 1-1c.8T((1-p)*1c.7C/2)},cg:m(p,x){x=x[0]||1.cd;k 1c.36(p,2)*((x+1)*p-x)},cc:m(p){o J;M(o a=0,b=1;1;a+=b,b/=2){B(p>=(7-4*a)/11){J=-1c.36((11-6*a-11*p)/4,2)+b*b;1B}}k J},c9:m(p,x){k 1c.36(2,10*--p)*1c.9p(20*p*1c.7C*(x[0]||1)/3)}});[\'cb\',\'bX\',\'bW\',\'bJ\'].1z(m(1W,i){1h.2V[1W]=O 1h.7K(m(p){k 1c.36(p,[i+2])});1h.2V.7g(1W)});o 3X={};3X.2F=O 1f({C:{4M:U,2k:\'4x\',4P:1f.1r,9v:1f.1r,25:1f.1r,9l:1f.1r,9b:1f.1r,1M:U,3A:{x:\'1H\',y:\'1E\'},3T:U,9t:6},1w:m(F,C){c.3Z(C);c.L=$(F);c.4M=$(c.C.4M)||c.L;c.2Z={\'18\':{},\'2e\':{}};c.J={\'1q\':{},\'18\':{}};c.2u={\'1q\':c.1q.5K(c),\'4i\':c.4i.5K(c),\'3H\':c.3H.5K(c),\'1S\':c.1S.17(c)};c.9q();B(c.C.1w)c.C.1w.1X(c)},9q:m(){c.4M.29(\'7e\',c.2u.1q);k c},bK:m(){c.4M.4m(\'7e\',c.2u.1q);k c},1q:m(K){c.1v(\'9v\',c.L);c.2Z.1q=K.4k;o 1M=c.C.1M;c.1M={\'x\':[],\'y\':[]};M(o z 1e c.C.3A){B(!c.C.3A[z])5L;c.J.18[z]=c.L.1Z(c.C.3A[z]).2P();c.2Z.2e[z]=K.4k[z]-c.J.18[z];B(1M&&1M[z]){M(o i=0;i<2;i++){B($2w(1M[z][i]))c.1M[z][i]=($G(1M[z][i])==\'m\')?1M[z][i]():1M[z][i]}}}B($G(c.C.3T)==\'3P\')c.C.3T={\'x\':c.C.3T,\'y\':c.C.3T};R.2S(\'4g\',c.2u.4i);R.2S(\'7l\',c.2u.1S);c.1v(\'4P\',c.L);K.1S()},4i:m(K){o 9u=1c.2c(1c.bL(1c.36(K.4k.x-c.2Z.1q.x,2)+1c.36(K.4k.y-c.2Z.1q.y,2)));B(9u>c.C.9t){R.4h(\'4g\',c.2u.4i);R.2S(\'4g\',c.2u.3H);c.3H(K);c.1v(\'9l\',c.L)}K.1S()},3H:m(K){c.4K=U;c.2Z.18=K.4k;M(o z 1e c.C.3A){B(!c.C.3A[z])5L;c.J.18[z]=c.2Z.18[z]-c.2Z.2e[z];B(c.1M[z]){B($2w(c.1M[z][1])&&(c.J.18[z]>c.1M[z][1])){c.J.18[z]=c.1M[z][1];c.4K=1g}19 B($2w(c.1M[z][0])&&(c.J.18[z]<c.1M[z][0])){c.J.18[z]=c.1M[z][0];c.4K=1g}}B(c.C.3T[z])c.J.18[z]-=(c.J.18[z]%c.C.3T[z]);c.L.30(c.C.3A[z],c.J.18[z]+c.C.2k)}c.1v(\'9b\',c.L);K.1S()},1S:m(){R.4h(\'4g\',c.2u.4i);R.4h(\'4g\',c.2u.3H);R.4h(\'7l\',c.2u.1S);c.1v(\'25\',c.L)}});3X.2F.56(O 2A,O 6a);P.Q({bI:m(C){k O 3X.2F(c,$1Q({3A:{x:\'2H\',y:\'3f\'}},C))}});3X.9j=3X.2F.Q({C:{5o:[],2K:U,22:[]},1w:m(F,C){c.3Z(C);c.L=$(F);c.5o=$$(c.C.5o);c.2K=$(c.C.2K);c.2i={\'L\':c.L.1Z(\'2i\'),\'2K\':U};B(c.2K)c.2i.2K=c.2K.1Z(\'2i\');B(![\'7y\',\'4o\',\'7t\'].1j(c.2i.L))c.2i.L=\'4o\';o 1E=c.L.1Z(\'1E\').2P();o 1H=c.L.1Z(\'1H\').2P();B(c.2i.L==\'4o\'&&![\'7y\',\'4o\',\'7t\'].1j(c.2i.2K)){1E=$2w(1E)?1E:c.L.9i(c.C.22);1H=$2w(1H)?1H:c.L.9h(c.C.22)}19{1E=$2w(1E)?1E:0;1H=$2w(1H)?1H:0}c.L.7w({\'1E\':1E,\'1H\':1H,\'2i\':c.2i.L});c.1o(c.L)},1q:m(K){c.2I=1k;B(c.2K){o 3M=c.2K.6j();o F=c.L.6j();B(c.2i.L==\'4o\'&&![\'7y\',\'4o\',\'7t\'].1j(c.2i.2K)){c.C.1M={\'x\':[3M.1H,3M.4H-F.2H],\'y\':[3M.1E,3M.4I-F.3f]}}19{c.C.1M={\'y\':[0,3M.3f-F.3f],\'x\':[0,3M.2H-F.2H]}}}c.1o(K)},3H:m(K){c.1o(K);o 2I=c.4K?U:c.5o.2R(c.8V,c).7p();B(c.2I!=2I){B(c.2I)c.2I.1v(\'bH\',[c.L,c]);c.2I=2I?2I.1v(\'bD\',[c.L,c]):1k}k c},8V:m(F){F=F.6j(c.C.22);o 18=c.2Z.18;k(18.x>F.1H&&18.x<F.4H&&18.y<F.4I&&18.y>F.1E)},1S:m(){B(c.2I&&!c.4K)c.2I.1v(\'bF\',[c.L,c]);19 c.L.1v(\'bG\',c);c.1o();k c}});P.Q({bM:m(C){k O 3X.9j(c,C)}});o 5W=O 1f({C:{1P:\'42\',9x:1g,8N:1f.1r,4A:1f.1r,6d:1f.1r,9d:1g,4Q:\'bN-8\',98:U,3O:{}},6E:m(){c.2g=(W.66)?O 66():(W.2s?O 9a(\'bT.bU\'):U);k c},1w:m(C){c.6E().3Z(C);c.C.4R=c.C.4R||c.4R;c.3O={};B(c.C.9d&&c.C.1P==\'42\'){o 4Q=(c.C.4Q)?\'; bV=\'+c.C.4Q:\'\';c.4C(\'9X-G\',\'8Y/x-9k-bS-bR\'+4Q)}B(c.C.1w)c.C.1w.1X(c)},8R:m(){B(c.2g.4u!=4||!c.4a)k;c.4a=U;o 41=0;49{41=c.2g.41}48(e){};B(c.C.4R.1X(c,41))c.4A();19 c.6d();c.2g.69=1f.1r},4R:m(41){k((41>=bO)&&(41<bP))},4A:m(){c.3a={\'1I\':c.2g.bQ,\'5i\':c.2g.ch};c.1v(\'4A\',[c.3a.1I,c.3a.5i]);c.7h()},6d:m(){c.1v(\'6d\',c.2g)},4C:m(1p,J){c.3O[1p]=J;k c},5a:m(2r,1K){B(c.C.98)c.8O();19 B(c.4a)k c;c.4a=1g;B(1K&&c.C.1P==\'53\'){2r=2r+(2r.1j(\'?\')?\'&\':\'?\')+1K;1K=1k}c.2g.4z(c.C.1P.7D(),2r,c.C.9x);c.2g.69=c.8R.17(c);B((c.C.1P==\'42\')&&c.2g.ci)c.4C(\'cK\',\'cL\');$Q(c.3O,c.C.3O);M(o G 1e c.3O)49{c.2g.cM(G,c.3O[G])}48(e){};c.1v(\'8N\');c.2g.5a($4F(1K,1k));k c},8O:m(){B(!c.4a)k c;c.4a=U;c.2g.79();c.2g.69=1f.1r;c.6E();c.1v(\'6I\');k c}});5W.56(O 6G,O 2A,O 6a);o 9B=5W.Q({C:{1K:1k,71:1k,25:1f.1r,5Y:U,6V:U},1w:m(2r,C){c.29(\'4A\',c.25);c.3Z(C);c.C.1K=c.C.1K||c.C.cJ;B(![\'42\',\'53\'].1j(c.C.1P)){c.5h=\'5h=\'+c.C.1P;c.C.1P=\'42\'}c.1o();c.4C(\'X-cI-cE\',\'66\');c.4C(\'cF\',\'1I/70, 1I/cG, 8Y/5i, 1I/5i, */*\');c.2r=2r},25:m(){B(c.C.71)$(c.C.71).1r().72(c.3a.1I);B(c.C.5Y||c.C.6V)c.5Y();c.1v(\'25\',[c.3a.1I,c.3a.5i],20)},9J:m(1K){1K=1K||c.C.1K;21($G(1K)){Y\'L\':1K=$(1K).5c();1B;Y\'2t\':1K=6Y.5c(1K)}B(c.5h)1K=(1K)?[c.5h,1K].1V(\'&\'):c.5h;k c.5a(c.2r,1K)},5Y:m(){o 2f,3b;B(c.C.6V||(/(cN|cU)2f/).2N(c.9C(\'9X-G\')))3b=c.3a.1I;19{3b=[];o 5e=/<2f[^>]*>([\\s\\S]*?)<\\/2f>/cW;62((2f=5e.cT(c.3a.1I)))3b.1i(2f[1]);3b=3b.1V(\'\\n\')}B(3b)(W.9U)?W.9U(3b):W.9G(3b,0)},9C:m(1p){49{k c.2g.cS(1p)}48(e){};k 1k}});6Y.5c=m(1O){o 47=[];M(o I 1e 1O)47.1i(6m(I)+\'=\'+6m(1O[I]));k 47.1V(\'&\')};P.Q({5a:m(C){k O 9B(c.5b(\'cQ\'),$1Q({1K:c.5c()},C,{1P:\'42\'})).9J()}});o 3g=O 3d({C:{6k:U,6i:U,3r:U,4y:U},26:m(1n,J,C){C=$1Q(c.C,C);J=6m(J);B(C.6k)J+=\'; 6k=\'+C.6k;B(C.6i)J+=\'; 6i=\'+C.6i;B(C.3r){o 6h=O 9z();6h.cR(6h.9Q()+C.3r*24*60*60*8A);J+=\'; cC=\'+6h.cp()}B(C.4y)J+=\'; 4y\';R.3K=1n+\'=\'+J;k $Q(C,{\'1n\':1n,\'J\':J})},53:m(1n){o J=R.3K.2M(\'(?:^|;)\\\\s*\'+1n.84()+\'=([^;]*)\');k J?cq(J[1]):U},2O:m(3K,C){B($G(3K)==\'2t\')c.26(3K.1n,\'\',$1Q(3K,{3r:-1}));19 c.26(3K,\'\',$1Q(C,{3r:-1}))}});o 3h={3F:m(N){21($G(N)){Y\'2h\':k\'"\'+N.31(/(["\\\\])/g,\'\\\\$1\')+\'"\';Y\'1u\':k\'[\'+N.2y(3h.3F).1V(\',\')+\']\';Y\'2t\':o 2h=[];M(o I 1e N)2h.1i(3h.3F(I)+\':\'+3h.3F(N[I]));k\'{\'+2h.1V(\',\')+\'}\';Y\'3P\':B(cr(N))1B;Y U:k\'1k\'}k 6g(N)},54:m(3I,4y){k(($G(3I)!=\'2h\')||(4y&&!3I.2N(/^("(\\\\.|[^"\\\\\\n\\r])*?"|[,:{}\\[\\]0-9.\\-+co-u \\n\\r\\t])+?$/)))?1k:ck(\'(\'+3I+\')\')}};3h.cl=5W.Q({1w:m(2r,C){c.2r=2r;c.29(\'4A\',c.25);c.1o(C);c.4C(\'X-cs\',\'ct\')},5a:m(N){k c.1o(c.2r,\'cz=\'+3h.3F(N))},25:m(){c.1v(\'25\',[3h.54(c.3a.1I,c.C.4y)])}});o 8v=O 3d({70:m(1O,1y){1y=$1Q({\'58\':1f.1r},1y);o 2f=O P(\'2f\',{\'3W\':1O}).65({\'3C\':1y.58,\'cA\':m(){B(c.4u==\'6v\')c.1v(\'3C\')}});4p 1y.58;k 2f.6f(1y).34(R.67)},1s:m(1O,1y){k O P(\'cB\',$1Q({\'cy\':\'cx\',\'cu\':\'cv\',\'G\':\'1I/1s\',\'7O\':1O},1y)).34(R.67)},4s:m(1O,1y){1y=$1Q({\'58\':1f.1r,\'cw\':1f.1r,\'c3\':1f.1r},1y);o 4s=O cm();4s.3W=1O;o L=O P(\'7d\',{\'3W\':1O});[\'3C\',\'79\',\'8l\'].1z(m(G){o K=1y[\'51\'+G];4p 1y[\'51\'+G];L.29(G,m(){c.4m(G,1b.7b);K.1X(c)})});B(4s.2H&&4s.3f)L.1v(\'3C\',L,1);k L.6f(1y)},6p:m(4r,C){C=$1Q({25:1f.1r,8F:1f.1r},C);B(!4r.1i)4r=[4r];o 6p=[];o 63=0;4r.1z(m(1O){o 7d=O 8v.4s(1O,{\'58\':m(){C.8F.1X(c,63);63++;B(63==4r.V)C.25()}});6p.1i(7d)});k O 1R(6p)}});o 3k=O 1f({V:0,1w:m(2t){c.N=2t||{};c.55()},53:m(1n){k(c.6o(1n))?c.N[1n]:1k},6o:m(1n){k(1n 1e c.N)},26:m(1n,J){B(!c.6o(1n))c.V++;c.N[1n]=J;k c},55:m(){c.V=0;M(o p 1e c.N)c.V++;k c},2O:m(1n){B(c.6o(1n)){4p c.N[1n];c.V--}k c},1z:m(T,17){$1z(c.N,T,17)},Q:m(N){$Q(c.N,N);k c.55()},1Q:m(){c.N=$1Q.3t(1k,[c.N].Q(1b));k c.55()},1r:m(){c.N={};c.V=0;k c},1G:m(){o 1G=[];M(o I 1e c.N)1G.1i(I);k 1G},1A:m(){o 1A=[];M(o I 1e c.N)1A.1i(c.N[I]);k 1A}});m $H(N){k O 3k(N)};3k.3g=3k.Q({1w:m(1p,C){c.1p=1p;c.C=$Q({\'8x\':1g},C||{});c.3C()},8E:m(){B(c.V==0){3g.2O(c.1p,c.C);k 1g}o 3I=3h.3F(c.N);B(3I.V>cj)k U;3g.26(c.1p,3I,c.C);k 1g},3C:m(){c.N=3h.54(3g.53(c.1p),1g)||{};c.55()}});3k.3g.2m={};[\'Q\',\'26\',\'1Q\',\'1r\',\'2O\'].1z(m(1P){3k.3g.2m[1P]=m(){3k.1x[1P].3t(c,1b);B(c.C.8x)c.8E();k c}});3k.3g.56(3k.3g.2m);o 2x=O 1f({1w:m(2o,G){G=G||(2o.1i?\'1m\':\'3i\');o 1m,1Y;21(G){Y\'1m\':1m=2o;1Y=1m.7o();1B;Y\'1Y\':1m=2o.96();1Y=2o;1B;5Z:1m=2o.57(1g);1Y=1m.7o()}1m.1Y=1Y;1m.3i=1m.52();k $Q(1m,2x.1x)},4f:m(){o 4W=$A(1b);o 6l=($G(4W[4W.V-1])==\'3P\')?4W.cn():50;o 1m=c.6Z();4W.1z(m(2o){2o=O 2x(2o);M(o i=0;i<3;i++)1m[i]=1c.2c((1m[i]/ 3w * (3w - 6l)) + (2o[i] /3w*6l))});k O 2x(1m,\'1m\')},cD:m(){k O 2x(c.2y(m(J){k 4e-J}))},cP:m(J){k O 2x([J,c.1Y[1],c.1Y[2]],\'1Y\')},cV:m(6b){k O 2x([c.1Y[0],6b,c.1Y[2]],\'1Y\')},cO:m(6b){k O 2x([c.1Y[0],c.1Y[1],6b],\'1Y\')}});m $cH(r,g,b){k O 2x([r,g,b],\'1m\')};m $bE(h,s,b){k O 2x([h,s,b],\'1Y\')};2j.Q({7o:m(){o 4O=c[0],4N=c[1],5x=c[2];o 2C,5l,6u;o 1L=1c.1L(4O,4N,5x),2X=1c.2X(4O,4N,5x);o 3R=1L-2X;6u=1L/4e;5l=(1L!=0)?3R/1L:0;B(5l==0){2C=0}19{o 7i=(1L-4O)/3R;o 7A=(1L-4N)/3R;o br=(1L-5x)/3R;B(4O==1L)2C=br-7A;19 B(4N==1L)2C=2+7i-br;19 2C=4+7A-7i;2C/=6;B(2C<0)2C++}k[1c.2c(2C*9Z),1c.2c(5l*3w),1c.2c(6u*3w)]},96:m(){o br=1c.2c(c[2]/3w*4e);B(c[1]==0){k[br,br,br]}19{o 2C=c[0]%9Z;o f=2C%60;o p=1c.2c((c[2]*(3w-c[1]))/dL*4e);o q=1c.2c((c[2]*(a0-c[1]*f))/9O*4e);o t=1c.2c((c[2]*(a0-c[1]*(60-f)))/9O*4e);21(1c.8s(2C/60)){Y 0:k[br,t,p];Y 1:k[q,br,p];Y 2:k[p,br,t];Y 3:k[p,q,br];Y 4:k[t,p,br];Y 5:k[br,p,q]}}k U}});', 62, 876, '||||||||||||this||||||||return||function||var|||||||||||||if|options|||el|type||property|value|event|element|for|obj|new|Element|extend|document||fn|false|length|window||case||||from||to|elements||bind|now|else|events|arguments|Math|param|in|Class|true|Fx|push|contains|null|args|rgb|key|parent|name|start|empty|css|items|array|fireEvent|initialize|prototype|properties|each|values|break|result|style|top|className|keys|left|text|selector|data|max|limit|props|source|method|merge|Elements|stop|prop|parsed|join|transition|call|hsb|getStyle||switch|overflown|mode||onComplete|set||relatedTarget|addEvent|current|timer|round|custom|pos|script|transport|string|position|Array|unit|nocash|Methods|Garbage|color|opacity|delay|url|ie|object|bound|temp|chk|Color|map|params|Events|parse|hue|documentElement|Event|Base|getElementsByTagName|width|overed|margin|container|create|match|test|remove|toInt|context|filter|addListener|tag|item|Transitions|CSS|min|parentNode|mouse|setStyle|replace||time|inject|option|pow||||response|scripts|shared|Abstract|iCss|height|Cookie|Json|hex|returns|Hash|index|target|offset|iterable|border|tmp|duration|Styles|apply|iTo|getValue|100|scrollTo|previous|select|modifiers|xpath|load|id|val|toString|periodical|drag|str|compute|cookie|webkit|cont|setNow|headers|number|getPosition|delta|size|grid|wrapper|increase|src|Drag|chains|setOptions||status|post|mousewheel|wait|scroll||queryString|catch|try|running|getNow|fx|native|255|mix|mousemove|removeListener|check|results|page|fromTo|removeEvent|indexOf|absolute|delete|collect|sources|image|htmlElement|readyState|len|getTag|px|secure|open|onSuccess|bit|setHeader|next|layout|pick|offsetHeight|right|bottom|walk|out|offsetWidth|handle|green|red|onStart|encoding|isSuccess|toLowerCase|parseFloat|unique|klass|colors|parseInt|scrollLeft|domReady||on|rgbToHex|get|evaluate|setLength|implement|hexToRgb|onload|scrollTop|send|getProperty|toQueryString|precision|regexp|iFrom|iNow|_method|xml|HTMLElement|code|saturation|splice|setMany|droppables|fKey|realType|hidden|fix|preventDefault|trash|removeEvents|Listeners|blue|stopPropagation|mp|scrollWidth|defined|visibility|split|every|body|Multi|scrollHeight|brother|setProperty|bindWithEvent|continue|tagName|end|Properties|getElementsBySelector|getElementById|loaded|getElements|webkit419|evType|currentStyle|XHR|typeof|evalScripts|default||forEach|while|counter|included|addEvents|XMLHttpRequest|head|proto|onreadystatechange|Options|percent|generic|onFailure|regex|setProperties|String|date|path|getCoordinates|domain|alpha|encodeURIComponent|attempt|hasKey|images|include|domready|ie_ready|getParam|brightness|complete|flag|getItems|trim|newArray|transitions|insertBefore|first|found|setTransport|concat|Chain|firstChild|onCancel|clear|node|getSize|scrollSize|add|Style|checked|padding|iProps|qs|charAt|disabled|evalResponse|multiple|random|Object|copy|javascript|update|setHTML|innerText|selected|easeType|Dom|cssText|xhtml|abort|hasChild|callee|addEventListener|img|mousedown|gecko|compat|callChain|rr|DOMMouseScroll|NativeEvents|mouseup|appendChild|pageX|rgbToHsb|getLast|merged|hasClass|pageY|fixed|RegExp|nodeType|setStyles|clean|relative|mouseover|gr|Function|PI|toUpperCase|pairs|class|operator|unload|camelCase|getMany|Transition|mouseout|textContent|borderShort|href|clientY|innerHTML|direction|capitalize|Width|picked|which|prefix|constructor|fixStyle|clientX|appendText|clientWidth|opera|clientHeight|escapeRegExp|pageXOffset|Merge|wheelDelta|resolver|filterByAttribute|styleSheet|pageYOffset|pp|0px|filterByClass|getFormElements|normal|mouseleave|mouseenter|cloneEvents|filterById|error|beforeunload|Bottom|keydown|Left|sel|PropertiesIFlag|floor|click|removeEventListener|Asset|textarea|autoSave|getElement|relatedTargetGecko|1000|fixRelatedTarget|substr|input|save|onProgress|extended|Right|shift|Top|slice|getWidth|where|onRequest|cancel|slideOut|getNext|onStateChange|defaultView|sin|hyphenate|checkAgainst|slideIn|childNodes|application|getStyles|styles|nodeValue|injectAfter|adopt|hide|vertical|hsbToRgb|elementsProperty|autoCancel|zoom|ActiveXObject|onDrag|contents|urlEncoded|undefined|addClass|removeClass|getLeft|getTop|Move|www|onSnap|before|setOpacity|visible|cos|attach|after|argument|snap|distance|onBeforeStart|toElement|async|iParsed|Date|toFloat|Ajax|getHeader|getScrollLeft|ie6|getScrollHeight|setTimeout|change|step|request|Single|removeChild|interval|full|600000|Number|getTime|fps|getScrollWidth|getScrollTop|execScript|createElement|wheelStops|Content|getHeight|360|6000|wheel|getText|taintEnabled|clone|attachEvent|version|webkit420|nodeName|textnode|setInterval|cssFloat|detail|120|injectInside|chain|cloneNode|styleFloat|navigator|injectTop|bindAsEventListener|keyCode|replaceChild|control|shiftKey||pass|meta|alt|altKey|ctrlKey|createTextNode|metaKey|khtml|MooTools|replaceWith|BackgroundImageCache|float|CollectGarbage|toggleClass|srcElement|err|getBoxObjectFor|detachEvent|readOnly|getParent|lastChild|some|getChildren|associate|iframe|borderWidth|borderStyle|borderColor|getPrevious|execCommand|getFirst|ie7|DOMElement|attributes|getProperties|removeAttribute|getRandom|removeProperty|boolean|embed|clearInterval|clearTimeout|getAttribute|times|Window|Sibling|transparent|tabIndex|maxlength|tabindex|accessKey|hasLayout|maxLength|readonly|zIndex|all|frameBorder|frameborder|Document|clearChain|whitespace|colSpan|rowspan||colspan|getPropertyValue|htmlFor|rowSpan|collection|accesskey|setText|setAttribute|getComputedStyle|injectBefore|toLeft|over|HSB|drop|emptydrop|leave|makeResizable|Quint|detach|sqrt|makeDraggable|utf|200|300|responseText|urlencoded|form|Microsoft|XMLHTTP|charset|Quart|Cubic|Out|InOut|ease|Pow|In|onerror|easeIn|easeOut|easeInOut|Expo|Circ|Elastic|111|Quad|Bounce|618|acos|Sine|Back|responseXML|overrideMimeType|4096|eval|Remote|Image|pop|Eaeflnr|toGMTString|decodeURIComponent|isFinite|Request|JSON|media|screen|onabort|stylesheet|rel|json|readystatechange|link|expires|invert|With|Accept|html|RGB|Requested|postBody|Connection|close|setRequestHeader|ecma|setBrightness|setHue|action|setTime|getResponseHeader|exec|java|setSaturation|gi|toggle|linear|contextmenu|filterByTag|ES|reset|submit|move|focus|blur|namespaceURI|starts|snapshotItem|http|w3|snapshotLength|UNORDERED_NODE_SNAPSHOT_TYPE|with|substring|show|resize|keyup|fromElement|cancelBubble|returnValue|button|rightClick||fromCharCode|menu|client|enter|up|tab|dblclick|keypress|backspace|space|down|esc|org|XPathResult|Scroll|effects|DOMContentLoaded|defer|https|write|onDomReady|1999|10000|clearTimer|500|effect|innerWidth|innerHeight|protocol|void|checkbox|radio|location|getElementsByClassName|div|horizontal|overflow|Slide|password|offsetParent|toTop|toRight|toBottom|offsetLeft|offsetTop'.split('|'), 0, {}))
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片...
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库 回到首页 目录: Python语言高频重点汇总 目录: 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Qt实践录:开篇
本系列文章介绍笔者的Qt实践之路。
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
一条链接即可让黑客跟踪你的位置! | Seeker工具使用
搬运自:冰崖的部落阁(icecliffsnet) 严正声明:本文仅限于技术讨论,严禁用于其他用途。 请遵守相对应法律规则,禁止用作违法途径,出事后果自负! 上次写的防社工文章里边提到的gps定位信息(如何防止自己被社工或人肉) 除了主动收集他人位置信息以外,我们还可以进行被动收集 (没有技术含量) Seeker作为一款高精度地理位置跟踪工具,同时也是社交工程学(社会工程学)爱好者...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
Python学习笔记(语法篇)
本篇博客大部分内容摘自埃里克·马瑟斯所著的《Python编程:从入门到实战》(入门类书籍),采用举例的方式进行知识点提要 关于Python学习书籍推荐文章 《学习Python必备的8本书》 Python语法特点: 通过缩进进行语句组织 不需要变量或参数的声明 冒号 1 变量和简单数据结构 1.1 变量命名 只能包含字母、数字和下划线,且不能以数字打头。 1.2 字符串 在Python中,用引号...
相关热词 c#如何定义数组列表 c#倒序读取txt文件 java代码生成c# c# tcp发送数据 c#解决时间格式带星期 c#类似hashmap c#设置istbox的值 c#获取多线程返回值 c# 包含数字 枚举 c# timespan
立即提问