在jsp页面中,当url地址改变时弹出一个对话框

在一个jsp页面中有一些按钮,这些按钮可以跳到其他页面,在对这个页面执行一系列方法之后,我需要在点击该页面任何一个按钮之前都弹出一个提示框,提示是否保存本次修改。我不要在每个按钮对于的jsp页面分别判断,我需要在本页面上直接判断,当地址栏变化时则弹出保存框。请问大神有什么思路可以让我实现。

1个回答

 window.onbeforeunload=function(e){
  return (window.event||e).returnValue='确认离开页面?!'
}
skyshuai1
skyshuai1 回复showbo: 嗯 ,我知道了, 谢谢你。
接近 5 年之前 回复
showbo
支付宝加好友偷能量挖 回复skyshuai1: 你试过没有了。。这个只要加载页面就行,不用加载按钮里面,只要离开页面就会提示
接近 5 年之前 回复
skyshuai1
skyshuai1 你这个还是在按钮链接的其他jsp页面中写啊,由于我的按钮比较多,那样写太麻烦而且到时候不容易维护。我需要的是在当前jsp页面上写一个方法,就是当地址栏变化时然后自动执行这个方法弹出保存框。
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
表单提交后页面跳转问题
表单提交后html页面好像跳转了,对话框弹出新页面JavaScript写的内容,屏幕显示的还是原来的界面,地址栏也没变。但我手动输入新页面的URL地址,正确显示了新页面的内容和地址。 旧的页面是login.jsp,这是后端跳转的代码: @RequestMapping("/logUser") public String logUser(User user, Model model) { List<User> userlist1 = userService.searchUser1(); for (User user1 : userlist1) { if (user.getUsername().equals(user1.getUsername()) && user.getPassword().equals(user1.getPassword())) { model.addAttribute("loginsuccess", "登陆成功"); model.addAttribute("currentUser", user1); return "userindex"; } if (user.getUsername()==null||user.getUsername().trim()==""||user.getPassword()==null||user.getPassword().trim()=="") { model.addAttribute("loginnull", "请输入用户名或密码"); return "login"; } } model.addAttribute("loginfail", "用户名或密码错误"); return "login"; } 新界面userindex.jsp用EL表达式将model值取出,并用JavaScript获取元素弹框。登陆成功后提示登陆成功,但还在旧的页面 ![图片说明](https://img-ask.csdn.net/upload/201911/12/1573547142_531217.png) ![图片说明](https://img-ask.csdn.net/upload/201911/12/1573547374_618268.png)
想在Flexigrid增加一个弹出对话框进行更详细的检索如何做到?
<p><br><br> 看了 matychen  的<span style="color: #006699;">jQuery插件flexigrid使用总结 </span><span style="color: #000000;">也想试试,其它的功能都可以用了,只是觉得默认的快速度检索功能太少了,想增加一个弹出窗,在对话框里增加更多的查询输入,如图:<img src="http://dl.iteye.com/upload/attachment/247835/4c39cb52-af9d-36e2-87ea-1d5a46f32eb1.jpg" alt=""></span></p> <p> </p> <p>一切都工作都弄妥了,没想到最后查询结果返回的json格式的记录弄不清楚显示到grid里去了</p> <p> </p> <p>1. 通过servlet返回的数据格式如下:</p> <div class="netInfoResponseText netInfoText "><span style="font-family: Courier New; background-color: #fafafa;">{'page':1,</span></div> <div class="netInfoResponseText netInfoText "><span style="font-family: Courier New; background-color: #fafafa;">'total':'2',</span></div> <div class="netInfoResponseText netInfoText "><span style="font-family: Courier New; background-color: #fafafa;">'rows':[</span></div> <div class="netInfoResponseText netInfoText "><span style="font-family: Courier New; background-color: #fafafa;">   {'id':1,'cell':[1,'深圳市','盐田区',6000,'2010-01-02','中文']},</span></div> <div class="netInfoResponseText netInfoText "><span style="font-family: Courier New; background-color: #fafafa;">   {'id':2,'cell':[2,'&lt;a href=index.jsp?a=123&gt;北京&lt;/a&gt;','顺义',10000,'2010-01-02','中文']},</span></div> <div class="netInfoResponseText netInfoText "><span style="font-family: Courier New; background-color: #fafafa;">   {'id':'3','cell':[3,'香港','九龙','20000','2010-01-02','英文']}</span></div> <div class="netInfoResponseText netInfoText "> <span style="font-family: Courier New; background-color: #fafafa;">]</span><span style="font-family: Courier New; background-color: #fafafa;">}</span> </div> <div class="netInfoResponseText netInfoText "><span style="font-family: Courier New; background-color: #fafafa;">2.请求ajax如下:</span></div> <div class="netInfoResponseText netInfoText "><span style="font-family: Courier New; background-color: #fafafa;">....</span></div> <div class="netInfoResponseText netInfoText ">$.ajax({<br>       type:"POST",</div> <div class="netInfoResponseText netInfoText ">       url: "flexGridServlet.do?cmd=demoseacher",<br>       data: encodeURI(params),<br>       dataType:"json",<br>       success: function(data){<br>        <span style="color: #ff6600;"><strong>//这里怎么样才能将数据显示到grid中</strong></span><br>       },<br>       error: function(msg){<br>        alert("msg="+msg);<br>       }<br>     });</div> <div class="netInfoResponseText netInfoText "><strong></strong></div> <div class="netInfoResponseText netInfoText "><span style="font-family: Courier New; background-color: #fafafa;">....</span></div>
js 页面跳转 异常的问题
$.post("login", { username:username, password:pwd }, function( data, textStatus, jQxhr ){ alert(data.code); var url = "login.jsp"; if(data.code != 200){ alert(data.status); }else if(data.result == 1){ url = "index.jsp"; }else{ alert(data.status); } window.location = url; }, "json"); 代码如上,在IE下能正常跳转,在chrome下面能弹出对话框,页面还是停留在原页面,求大神指点
javascript生成的树形目录如何把读取的id传递给jsp页面
我用js读取数据库生成一个树形目录,树形目录做好了,可是不知道怎么把节点的id传到jsp页面或action里,最好action能通过request.getAttribute()得到所点节点的id,还有就是不知道如何像有些论坛上一个,点不同的节点,右面显示不同的jsp,小弟第一次做,请指教,谢谢,下面是我用的js代码: var Tree = new function() { this._url = "tree.jsp"; //用于请求数据的服务器页面地址 this._openMark = "<img src='images/nolines_minus.gif'/>"+"<img src='images/folderopen.gif'/>"; //目录节点处于展开状态时的标识 this._closeMark = "<img src='images/nolines_plus.gif'/>"+"<img src='images/folder.gif'/>"; //目录节点处于关闭状态时的标识 this._itemMark = "<img src='images/page.gif'/>"; //非目录节点标识 this._initId = "treeInit"; //树形目录初始div标识 this._rootData = "IS安全等级保护基础库"; //根节点文字信息 this._boxSuffix = "_childrenBox"; //子节点容器后缀 this._folderType = "folder"; //目录节点类型变量 this._itemType = "item"; //非目录节点类型变量 //初始化根节点 this.init = function() { var initNode = document.getElementById(this._initId); //获取初始div var _node = document.createElement("div"); //创建新div作为根节点 _node.id = "1"; //根节点id为0 _node.innerHTML = this.createItemHTML(_node.id, this._folderType, this._rootData); initNode.appendChild(_node); //将根节点加入初始div } //获取给定节点的子节点 this.getChildren = function(_parentId) { //获取页面子节点容器box var childBox = document.getElementById(_parentId + this._boxSuffix); //如果子节点容器已存在则直接设置显示状态,否则从服务器获取子节点信息 if (childBox) { var isHidden = (childBox.style.display == "none"); //判断当前状态是否隐藏 childBox.style.display = isHidden?"":"none"; //隐藏则显示,如果显示则变为隐藏 //根据子节点的显示状态修改父节点标识 var _parentNode = document.getElementById(_parentId); _parentNode.firstChild.innerHTML = isHidden?this._openMark:this._closeMark; } else { var xmlHttp=this.createXmlHttp(); //创建XmlHttpRequest对象 xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4) { //调用addChildren函数生成子节点 Tree.addChildren(_parentId, xmlHttp.responseXML); } } xmlHttp.open("GET", this._url + "?parentId=" + _parentId, true); xmlHttp.send(null); } } //根据获取的xmlTree信息,设置指定节点的子节点 this.addChildren = function(_parentId, _data) { var _parentNode = document.getElementById(_parentId); //获取父节点 _parentNode.firstChild.innerHTML = this._openMark; //设置节点前标记为目录展开形式 var _nodeBox = document.createElement("div"); //创建一个容器,称为box,用于存放所有子节点 _nodeBox.id = _parentId + this._boxSuffix; //容器的id规则为:在父节点id后加固定后缀 _nodeBox.className = "box"; //样式名称为box,div.box样式会对此节点生效 _parentNode.appendChild(_nodeBox); //将子节点box放入父节点中 var _children = _data.getElementsByTagName("tree")[0].childNodes; //获取所有item节点 var _child = null; //声明_child变量用于保存每个子节点 var _childType = null; //声明_childType变量用于保存每个子节点类型 for(var i=0; i<_children.length; i++) { //循环创建每个子节点 _child = _children[i]; _node = document.createElement("div"); //每个节点对应一个新div _node.id = _child.getAttribute("id"); //节点的id值就是获取数据中的id属性值 _childType = _child.getAttribute("isFolder")=="true"?this._folderType:this._itemType; //设置子节点类型 //根据节点类型不同,调用createItemHTML创建节点内容 if (_childType == this._itemType) { //非目录节点在最后多传一个link数据,用于点击后链接到新页面 _node.innerHTML = this.createItemHTML(_node.id, _childType, _child.firstChild.data, _child.getAttribute("link")); } else { //目录节点只需传递id,节点类型,节点数据 _node.innerHTML = this.createItemHTML(_node.id, _childType, _child.firstChild.data); } _nodeBox.appendChild(_node); //将创建好的节点加入子节点box中 } } //创建节点的页面片断 this.createItemHTML = function(itemId, itemType, itemData, itemLink) { //根据节点类型不同,返回不同的HTML片断 if (itemType == this._itemType) { //非目录节点的class属性以item开头,并且onclick事件调用Tree.clickItem函数 return '<span class="itemMark">'+this._itemMark+'</span>' + '<a href="Frame.do" style="text-decoration:none" target="main"><span class="item" >' +itemData+'</span></a>'; } else if (itemType == this._folderType) { //目录节点的class属性以folder开头,并且onclick事件调用Tree.getChildren函数 return '<span class="folderMark" onclick="Tree.getChildren(\'' + itemId + '\')">' + this._closeMark + '</span>' + '<span class="folder" onclick="Tree.getChildren(\'' + itemId + '\')">' + itemData + '</span>' } } //点击叶子节点后的动作,目前只是弹出对话框,可修改为链接到具体的页面 this.clickItem = function(_link) { return ; } //用于创建XMLHttpRequest对象 this.createXmlHttp=function() { var xmlHttp = null; //根据window.XMLHttpRequest对象是否存在使用不同的创建方式 if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); //FireFox、Opera等浏览器支持的创建方式 } else { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式 } return xmlHttp; } }
JQuery中ajax不能解析json
Action: @Controller @Scope("prototype") @Namespace("/") @ParentPackage("json-default") public class OaAction extends ActionSupport private String name; private String pass; private String msg; @Action(value="/login", results={@Result(name="success",location="/main.jsp"), @Result(name = "login",type="json") }) public String login() { Map<String,Object> map = new HashMap<String,Object>(); if(name=="经理1" && pass=="123456") { //将数据存储在map里,再转换成json类型数据,也可以自己手动构造json类型数据 map.put("flag","true"); map.put("info","欢迎登陆"); JSONObject json = JSONObject.fromObject(map);//将map对象转换成json类型数据 msg = json.toString();//给msg赋值,传递给页面 return SUCCESS; } else { map.put("flag","false"); map.put("info","用户名或者密码错误"); //将map对象转换成json类型数据,在此处打断点json有以下两个属性 nullObject : null; propeties:{flag=false, info=用户名或者密码错误} JSONObject json = JSONObject.fromObject(map); msg = json.toString();//给msg赋值,传递给页面 return "login"; } } @JSON public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public void setName(String name) { this.name = name; } public String getName() { return name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } jsp: <div id="lg"> <input type="text" name="username" id="uname"/> <input type="password" name="password" id="password"/> <input type="submit" class="login-sub" value="" id="lgbtn"/> <br /> <div id="msg"></div> </div> $(function(){ $('#lgbtn').click(function(){ var name=document.getElementById("uname").value; var pass=document.getElementById("password").value; $.ajax ({ url:"login.action", dataType:"json", type:"post", data:"name="+name+"&pass="+pass, async:false, success:function(data) { //将数据转换成json类型,可以把data用alert()输出出来看看到底是什么样的结构 alert(data);//弹出对话框的内容为:Object object var d = eval('('+data+')'); alert(""+d.flag+""); //没有弹出对话框 alert(""+d.info+""); }, error:function() { alert("请求失败");//没有报请求失败 } }); }); });
用easyui做form表单,但不显示出来
``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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>easyui</title> <link rel="stylesheet" type="text/css" href="/easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="/easyui/themes/icon.css"> <script type="text/javascript" src="/easyui/jquery.min.js"></script> <script type="text/javascript" src="/easyui/jquery.easyui.min.js"></script> <script type="text/javascript" src="/easyui/locale/easyui-lang-zh_CN.js"></script> <script type="text/javascript"> $(function() { var userDialog = $("#userDialog"); //点击添加按钮,弹出一个窗体Dialog $("#add").click(function() { //弹出窗体 userDialog.dialog("open"); }); }) </script> </head> <body> <!-- closed:true隐藏效果 --> <div id="userDialog" class="easyui-dialog" title="保存用户" data-options="iconCls:'icon-save',closed:true" <!-- auto代表自动判定大小 --> style="width: 300px; height: auto; padding: 20px" buttons="#btns"> <!--表单必须的属性:method="post",action提交的url地址,id属性 --> <!-- 注意id的命名,建议统一使用XXXForm --> <form id="userForm" method="post" action="user_save.jsp"> <table> <tr> <td>用户名:</td> <td><input class="easyui-validatebox" type="text" <!-- required:true代表此乃必填项 --> name="username" data-options="required:true"></input></td> </tr> <tr> <td>邮箱地址:</td> <td><input class="easyui-validatebox" type="text" name="email" data-options="validType:'email'"></input></td> </tr> <tr> <td>主题:</td> <td><input class="easyui-validatebox" type="text" name="subject" <!-- validType:'length[10,200]'代表限定字符数量为10至200 --> data-options="required:true,validType:'length[10,200]'"></input></td> </tr> <tr> <td>Message:</td> <td><textarea name="message" style="height: 60px;"></textarea></td> </tr> </table> </form> </div> <!--按钮面板作为对话框操作面板 --> <div id="btns"> <!--不要在href里面写js代码 --> <a id="btnSubmit" href="javascript:void(0)" class="easyui-linkbutton">保存</a> <a href="javascript:void(0)" class="easyui-linkbutton" onclick="$('#userDialog').dialog('close')">取消</a> </div> </body> </html> ``` 就显示两个按钮: ![图片说明](https://img-ask.csdn.net/upload/201604/25/1461593138_104897.jpg)
javascript验证checkbox,求答案!!!
主页上有一行行订单记录,每行最前面有个checkbox,最上面一行(标题行)有个全选的checkbox,订单有状态属性,分别是三种:新出、处理中、处理完成。 主页上还有一个处理按钮,用来改变订单的状态。 当 不选中行 的时候,点击处理按钮时,希望用JavaScript弹出对话框提示:请选择订单! 当选中的订单的状态是 新出 的订单时,弹出对话框提示:是否处理? 当选中的订单的状态不是新出时,弹出对话框提示:选择有误,请重新选择! 怎么样才能实现呀?不用后台验证,望前辈告知!!! 我的想法是在javascript中先获取所选中订单的一个或者多个ID,循环得到一个或者多个对象,再得到他们的状态,只要有一个不满足条件就break,将中间设定的参考变量变为相反。 具体怎么弄,还望大家帮忙,我是刚入行的小白,谢谢!下面是我的jsp代码,头部的javascript代码、input标签里的onclick写的不对,望改正,其他地方改不得呀~~~ <%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ include file="/common/taglibs.jsp"%> <html> <head> <link href="common/common.css" type="text/css" rel="stylesheet"> <script src="common/sortabletable.js" type="text/javascript"></script> <script src="common/common.js" type="text/javascript"></script> <script type="text/javascript" src="common/popcalendar.js"></script> <script type="text/javascript"> function validateState(ids,alertMsg,theFrm,actionUrl){ var a=false; for(var i=0;i<document.all(ids).length;i++){ if(document.all(ids)[i].checked==true){ a=true; } } if(a){ if(confirm(alertMsg)){ if(""!=actionUrl){ theFrm.action=actionUrl; } theFrm.submit(); } }else{ alert("请选择新开订单"); return false; } } </script> </head> <body> <div id="rightlayout" style="width: 700px"> <div style="text-align: left; color: red"> </div> <html:form action="/WorkOrderAction"> <br> <input type="button" name="payout" class="button" value="处理" onclick="validateState('ids','是否处理',this.form,'<c:url value="WorkOrderAction.do?method=changeState"/>')"> <br> <!-- 分页及排序 --> <c:import url="/common/pager.jsp" /> <p> <table width="100%" class="sort-table" id="itemsList" align="right"> <thead> <tr align="center"> <td><input type="checkbox" name="multipleSelect" onclick="checkBoxSelectAll('ids');" /> </td> <td>订单号</td> <td>订单主题</td> <td>状态</td> <td>下单时间</td> </tr> </thead> <tbody> <c:forEach var='vo' items="${ITEMS_COLLECTION}"> <tr onmouseout="changeColor(this,false,'orange');" onmouseover="changeColor(this,true,'orange')"> <td><input type="checkbox" name="ids" value="${vo.workId}"/> </td> <td>${vo.orderNumber}</td> <td>${vo.orderTheme}</td> <td>${stateMap[vo.stateId]}</td> <td><fmt:formatDate value="${vo.sendDate}" pattern="yyyy-MM-dd HH:mm" /> </td> </tr> </c:forEach> </tbody> <tfoot> <tr> <td colspan="9"></td> </tr> </tfoot> </table> </html:form>
ssh 实体对象转jason 前台无法显示
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <%@ include file="/public/head.jspf" %> <style type="text/css"> body { margin: 1px; } .searchbox { margin: -3; } </style> <script type="text/javascript"> $(function(){ $('#dg').datagrid({ //url地址改为请求categoryAction url:'forder_queryJoinUser.action', loadMsg:'Loading......', queryParams:{username:''}, fitColumns:true,//水平自动展开,如果设置此属性,则不会有水平滚动条,演示冻结列时,该参数不要设置 striped:true, //当数据多的时候不换行 nowrap:true, singleSelect:false, //如果为真,只允许单行显示,全显功能失效 //设置分页 pagination:true, //设置每页显示的记录数 pageSize:10, //设置可选的每页记录数,供用户选择,默认是10,20,30,40... pageList:[5,10,15,20], idField:'id',//指定id为标识字段,在删除,更新的时候有用,如果配置此字段,在翻页时,换页不会影响选中的项 toolbar: [{ iconCls: 'icon-edit', text:'更新订单', handler: function(){ //判断是否有选中行记录,使用getSelections获取选中的所有行 var rows = $("#dg").datagrid("getSelections"); if(rows.length == 0) { //弹出提示信息 $.messager.show({ //语法类似于java中的静态方法,直接对象调用 title:'错误提示', msg:'至少要选择一条记录', timeout:2000, showType:'slide', }); }else if(rows.length != 1) { //弹出提示信息 $.messager.show({ //语法类似于java中的静态方法,直接对象调用 title:'错误提示', msg:'每次只能更新一条记录', timeout:2000, showType:'slide', }); } else{ //弹出更新的页面 parent.$("#win").window({ title:"更新订单", width:350, height:250, content:'<iframe src="send_order_update.action" frameborder="0" width="100%" height="100%"/>' }); } } },'-',{ iconCls: 'icon-remove', text:'删除订单', handler: function(){ //判断是否有选中行记录,使用getSelections获取选中的所有行 var rows = $("#dg").datagrid("getSelections"); //返回被选中的行,如果没有任何行被选中,则返回空数组 if(rows.length == 0) { //弹出提示信息 $.messager.show({ title:'错误提示', msg:'至少要选择一条记录', timeout:2000, showType:'slide', }); } else { //提示是否确认删除,如果确认则执行删除的逻辑 $.messager.confirm('删除的确认对话框', '您确定要删除此项吗?', function(r){ if (r){ //1. 从获取的记录中获取相应的的id,拼接id的值,然后发送后台1,2,3,4 var ids = ""; for(var i = 0; i < rows.length; i ++) { ids += rows[i].id + ","; } ids = ids.substr(0, ids.lastIndexOf(",")); //2. 发送ajax请求 $.post("forder_deleteByIds.action",{ids:ids},function(result){ if(result == "true") { //将刚刚选中的记录删除,要不然会影响后面更新的操作 $("#dg").datagrid("uncheckAll"); //刷新当前页,查询的时候我们用的是load,刷新第一页,reload是刷新当前页 $("#dg").datagrid("reload");//不带参数默认为上面的queryParams } else { $.messager.show({ title:'删除异常', msg:'删除失败,请检查操作', timeout:2000, showType:'slide', }); } },"text"); } }); } } },'-',{ //查询按钮不是LinkButton,它有语法,但是也支持解析HTML标签 text:"<input id='ss' name='serach' />" }], rowStyler: function(index,row){ console.info("index" + index + "," + row) if(index % 2 == 0) { return 'background-color:#fff;'; } else { return 'background-color:#c4e1e1;'; } }, //同列属性,但是这些列将会冻结在左侧,大小不会改变,当宽度大于250时,会显示滚动条,但是冻结的列不在滚动条内 frozenColumns:[[ {field:'checkbox',checkbox:true}, {field:'id',title:'编号',width:60} ]], columns:[[ {field:'name',title:'收货人姓名',width:80}, {field:'phone',title:'收货人电话',width:100}, {field:'remark',title:'买家留言',width:100}, {field:'date',title:'创建日期',width:100}, {field:'total',title:'订单总价',width:100}, {field:'address',title:'收货地址',width:150}, {field:'user.id',title:'买家id',width:60}, {field:'user.login',title:'买家登录名',width:80}, {field:'status.status',title:'订单状态',width:100} ]] }); //把普通的文本框转化为查询搜索文本框 $('#ss').searchbox({ //触发查询事件 searcher:function(value,username){ //value表示输入的值 //获取当前查询的关键字,通过DataGrid加载相应的信息,使用load加载和显示第一页的所有行。 //如果指定了参数,它将取代'queryParams'属性。通常可以通过传递一些参数执行一次查询,通过调用这个方法会向上面url指定的action去发送请求,从服务器加载新数据。 $('#dg').datagrid('load',{ username: value }); }, prompt:'请输入搜索关键字' }); }); </script> </head> <body> <table id="dg"></table> </body> </html> `jsp代码 下面action: public String queryJoinUser() { // 用来存储分页的数据 pageMap = new HashMap<String, Object>(); System.out.println(username); // 根据关键字和分页的参数查询相应的数据 List<Forder> forderList = forderService.queryJoinUser(username, page, rows); pageMap.put("\"rows\"", forderList); pageMap.put("\"total\"", forderService.getCount(username)); System.out.println(pageMap); return "jsonMap"; } struts.xml <action name="forder_*" class="forderAction" method="{1}"> <result name="jsonMap" type="json"> <param name="root">pageMap</param> <param name="excludeProperties"> rows\[\d+\]\.post, rows\[\d+\]\.user\.pass, rows\[\d+\]\.user\.sex, rows\[\d+\]\.user\.phone, rows\[\d+\]\.user\.email, rows\[\d+\]\.status\.id </param> </result> <result name="bank"> /user/bank.jsp </result> </action> 执行后pageMap的输出: {"total"=1, "rows"=[Forder [id=1, name=张小, phone=1851663595, remark=是否被, date=null, total=14.00, post=4325232, addressrk=, date=null, total=100.00, post=dcvdf, address=市场v吃饭的]]} `` 没有报任何错误就是不显示![图片说明](https://img-ask.csdn.net/upload/201706/07/1496767475_187876.png) ``` ``` ```
ext.Window 第一次打开对话框没问题,第二次,次三.....就不行了
<p><span style="font-weight: bold;">一、表述:</span><br />    使用Ext.grid.GridPanel创建gird对象。grid的最后一列定义为{header: '授权',dataIndex: 'operate1',sortable: true,renderer:authorization},即点击最后一列中的元素将对话框。<br /><span style="font-weight: bold;">二、错误描述</span>:<br />    第一次弹出的对话框没有问题,第一此没有问题,第二,第三。。。。次就有问题了,每多点击一次对话框就会多嵌套一层对话框,对话框不断的嵌套,不知道是怎么回事,  多谢各位高手能指点一二、谢谢了!</p> <pre name="code" class="java">manageMySellerGrid = function(title, id){ //新窗体 showMemerAddWindow = function(){ memberAddWindow = new Ext.Window({ el: 'window_win', layout: 'fit', width: 300, height: 200, closable: true, closeAction: 'hide', plain: true, items: [memberForm] }); //memberAddWindow.show(Ext.get('newWindowButton')); memberAddWindow.show(); } authorization = function(value, cellmeta, record){ if(record.data['userTYpe']==1){ return '<a href="#">授权</a><a>'; }else{ return ''; } } <span style="font-weight: bold;"> authorizationOperate1=function(){ var win = authorizationOperate(); win.show(); } authorizationOperate = function(){ var win = new Ext.Window({ applyTo:'hello-win', layout:'fit', width:500, height:350, closeAction:'hide', closable:true, plain:false, modal:true, title:'测试' // items:new Ext.TabPanel({ // activeTab:0, // border:false, // items:[{title:"tab1",html:"tab1在windows窗口中"},{title:"tab2",html:"tab2在windows窗口中"}] // }) }); return win; }</span> /** * 以下是表单 */ //账号 var idField = new Ext.form.TextField({ fieldLabel: '账号', name: 'memberName', allowBlank: false, anchor: '90%', blankText: '账号不能为空' }); //密码 var passwordField = new Ext.form.TextField({ inputType: 'password', fieldLabel: '密码', name: 'password', allowBlank: false, anchor: '90%', blankText: '密码不能为空' }); //密码确认 var repasswordField = new Ext.form.TextField({ inputType: 'password', fieldLabel: '密码确认', name: 'repassword', allowBlank: false, anchor: '90%', blankText: '确认密码不能为空' }); //电子邮件 var emailField = new Ext.form.TextField({ fieldLabel: '电子邮件', name: 'email', allowBlank: false, anchor: '90%', vtype: 'email', blankText: '电子邮件不能为空' }); //真实姓名 var trueNameField = new Ext.form.TextField({ fieldLabel: '真实姓名', name: 'trueName', allowBlank: false, anchor: '90%', blankText: '真实姓名不能为空' }); var memberForm = new Ext.FormPanel({ monitorValid: true, labelAlign: 'top', frame: true, title: '添加新商户信息', width: 300, url: './userManage.jsp?command=insert&amp;groupid=' + sGroupid, items: [{ layout: 'column',// 该FormPanel的layout布局模式为列模式(column),包含2列 items: [{//第一列 columnWidth: 0.5, layout: 'form', items: [idField, passwordField] }, {//第二列 columnWidth: 0.5, layout: 'form', items: [repasswordField, emailField] }, { columnWidth: 0.5, layout: 'form', items: [trueNameField] }] }], buttons: [{ text: '提交', formBind: true, handler: function(){ if (memberForm.getForm().isValid()) { memberForm.getForm().submit({ method: 'POST', waitMsg: '保存中,请稍后...', success: function(){ memberForm.getForm().reset(); memberAddWindow.hide(); ds.reload(); }, failure: function(){ Ext.Msg.alert('错误', '服务器出现错误请稍后再试!'); } }); } } }, { text: '取消', handler: function(){ memberForm.getForm().reset(); memberAddWindow.hide(); } }] }); //添加标注 addTabOfMerLabel = function(url, title,id){ var mytab = myTabPanel.getItem(id); if(null==mytab){ myTabPanel.add(myGrid(url, title,id)).show(); }else{ myTabPanel.setActiveTab(mytab); } } //查看每个商户的标注 examineLabel = function(value, cellmeta, record, rowIndex, columnIndex, store){ var userId = record.data['id']; var url = '/mapscene/member/merGrid.jsp?userId=' + userId; var title = userId + '的标注'; var str = "<font color="blue"></font></a><font color="blue"><font color="blue"><a style="cursor: pointer;">查看标注</a><font>"; //var str = "<font color="blue"><a style="cursor: pointer;">查看标注</a><font>"; return str; } reader = new Ext.data.JsonReader({ totalProperty: 'totalProperty', root: 'root' }, [ {name: 'id'}, {name: 'email'}, {name: 'trueName'}, {name: 'sex'}, {name: 'password'}, {name: 'telephone'}, {name: 'fax'}, {name: 'company'}, {name: 'mobile'}, {name: 'address'}, {name: 'qq'}, {name: 'msn'}, {name: 'description'}, {name: 'userTYpe'}, {name: 'createDatetime'}, {name: 'operate'}, <span style="font-weight: bold;"> {name: 'operate1'}</span> ] ); var ds = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: '/mapscene/member/seller.jsp' }), reader: reader, baseParams:{userType:null,idOfSearch:null,command:'query'} }); //列模型 var sm = new Ext.grid.CheckboxSelectionModel(); var cm = null; if(i_userType==3){ cm=new Ext.grid.ColumnModel([ new Ext.grid.RowNumberer(), sm, {header: '账号',dataIndex: 'id',sortable: true}, {header: '电子邮件',dataIndex: 'email',sortable: true}, {header: '真实姓名',dataIndex: 'trueName',sortable: true}, {header: '性别',dataIndex: 'sex',sortable: true}, {header: '密码',dataIndex: 'password'}, {header: '电话号码',dataIndex: 'telephone',sortable: true}, {header: '传真',dataIndex: 'fax',sortable: true}, {header: '公司名称',dataIndex: 'company',sortable: true}, {header: '手机号码',dataIndex: 'mobile',sortable: true}, {header: '详细地址',dataIndex: 'address',sortable: true}, {header: 'qq号码',dataIndex: 'qq',sortable: true}, {header: 'msn',dataIndex: 'msn',sortable: true}, {header: '描述',dataIndex: 'description'}, {header: '创建时间',dataIndex: 'createDatetime',sortable: true}, {header: '操作',dataIndex: 'operate',renderer: examineLabel}, <span style="font-weight: bold;"> {header: '授权',dataIndex: 'operate1',sortable: true,renderer:authorization}</span> ]); }else{ cm=new Ext.grid.ColumnModel([ new Ext.grid.RowNumberer(), sm, {header: '账号',dataIndex: 'id',sortable: true}, {header: '电子邮件',dataIndex: 'email',sortable: true}, {header: '真实姓名',dataIndex: 'trueName',sortable: true}, {header: '性别',dataIndex: 'sex',sortable: true}, {header: '密码',dataIndex: 'password'}, {header: '电话号码',dataIndex: 'telephone',sortable: true}, {header: '传真',dataIndex: 'fax',sortable: true}, {header: '公司名称',dataIndex: 'company',sortable: true}, {header: '手机号码',dataIndex: 'mobile',sortable: true}, {header: '详细地址',dataIndex: 'address',sortable: true}, {header: 'qq号码',dataIndex: 'qq',sortable: true}, {header: 'msn',dataIndex: 'msn',sortable: true}, {header: '描述',dataIndex: 'description'}, {header: '创建时间',dataIndex: 'createDatetime',sortable: true}, {header: '操作',dataIndex: 'operate',renderer: examineLabel} ]); } var grid = new Ext.grid.GridPanel({ id: id, closable: true, ds: ds, cm: cm, sm:sm, viewConfig: {forceFit: true}, width: 1000, height: 2000, loadMask: {msg: '正在加载数据,请稍侯……'}, title: title, frame: true, renderTo: 'mylabel', tbar: [{ text: '删除', tooltip: '删除选中的项目', // iconCls:'remove', handler: function(){ var selectedRows = grid.getSelectionModel().getSelections(); var ids = []; for(var i=0;i&lt;selectedrows.length;i++){ var="" item="selectedRows[i].data;" ids.push(item.id);="" }="" if(ids.join('')="=''){Ext.MessageBox.alert('警告'," '必须选择一条记i录,进行删除!');return;}="" ext.messagebox.confirm('提示框',="" '你确定要进行该操作吗?!',="" function(btn){="" if="" (btn="=" 'yes')="" {="" ext.lib.ajax.request(="" 'post',="" 'usermanage.jsp',="" {="" success:="" function(e,="" b){="" var="" message="e.responseText;" ext.msg.alert('信息',="" message);="" ds.load({="" params:="" {="" start:="" 0,="" limit:="" 10="" }="" });="" },="" failure:="" function(){="" ext.msg.alert('错误',="" '删除时出现未知的错误');="" }="" },="" 'command="delete&amp;amp;ids='" +="" ids="" );="" }="" });="" }="" },="" '-',="" {="" id:="" 'newwindowbutton',="" text:="" '新面板中添加',="" iconcls:'user_add',="" handler:="" function(){="" showmemeraddwindow();="" 显示表单所在窗体="" }="" },'-',new="" ext.form.combobox({="" listclass:'x-combo-list-small',="" width:120,="" value:'请选择一种用户类型',="" id:'search-type',="" store:susername="='admin'?" new="" ext.data.simplestore({="" fields:="" ['text'],="" expanddata:="" true,="" data="" :="" ['请选择一种用户类型','普通用户',="" '代理商用户',="" '商户用户']="" }):new="" ext.data.simplestore({="" fields:="" ['text'],="" expanddata:="" true,="" data="" :="" ['请选择一种用户类型',="" '商户用户']="" }),="" displayfield:="" 'text',="" mode:="" 'local',="" forceselection:="" true,="" triggeraction:="" 'all',="" selectonfocus:true="" }),'-',new="" ext.form.textfield({="" fieldlabel:="" '',="" name:="" 'idofsearch',="" anchor:="" '90%'="" }),{="" text:="" '查询',="" tooltip:="" '删除选中的项目',="" handler:="" function(){="" var="" searchtype="Ext.get(&amp;quot;search-type&amp;quot;).getValue();" if(searchtype="='请选择一种用户类型'){" searchtype="null;" }else="" if(searchtype="='普通用户'){" searchtype="0;" }else="" if(searchtype="='代理商用户'){" searchtype="1;" }else="" if(searchtype="='商户用户'){" searchtype="2;" }="" var="" idofsearch="Ext.get(&amp;quot;idOfSearch&amp;quot;).getValue();" ds.baseparams.usertype="searchType;" ds.baseparams.idofsearch="idOfSearch;" if="" (searchtype="" !="null)" {="" ds.baseparams.command="search" ;="" }else{="" ds.baseparams.command="query" ;="" }="" ds.load({="" params:="" {="" start:="" 0,="" limit:="" 10="" }="" });="" }="" },'-'="" ],="" bbar:="" new="" ext.pagingtoolbar({="" pagesize:="" 10,="" store:="" ds,="" displayinfo:="" true,="" displaymsg:="" '显示第="" {0}="" 条到="" {1}="" 条记录,一共="" {2}="" 条',="" emptymsg:="" "没有记录"="" })="" });="" grid.render();="" ds.load({="" params:="" {="" start:="" 0,="" limit:="" 10="" }="" });="" return="" grid;="" }&lt;="" pre=""&gt; <p> </p></font></font></font></font></font></pre>
我在dwr入门的时候遇到一个问题,不知道是什么原因?请帮我看看
大家先看我的jsp文件代码: 我先描述我的问题,我运行这个代码,结果,能弹出对话框“haha“,然后弹出对话框”not found“ [code="java"] <%@ page language="java" pageEncoding="UTF-8"%> <html> <head> <title>My JSP 'test.jsp' starting page</title> <script type='text/javascript' src='js/util.js'></script> <script type='text/javascript' src='js/engine.js'></script> <script type='text/javascript' src='dwr/interface/service.js'> </script> <script type="text/javascript"> function firstDwr() { alert("haha"); [color=red]/////能弹出haha,说明能进入这个函数[/color] service.sayHello("Jorwen",callBackHello); [color=red]//////但是接着又弹出”not found“显然是说这个类没找到,这是为什么[/color] } function callBackHello(data) { alert(data); [color=red]/////没有进到这个函数里面[/color] } </script> </head> <body> <input type="button" name="button" value="测试" onclick="firstDwr()"> </body> </html> [/code] 下面给出dwr.xml , web.xml. 和 servrice.java代码 --------dwr.xml-------- [code="java"] <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://www.getahead.ltd.uk/dwr/dwr30.dtd"> <dwr> <allow> <create creator="new" javascript="service"> <param name="class" value="helloWorld.Service" /> </create> </allow> </dwr> [/code] --------web.xml-------- [code="java"] <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class> org.directwebremoting.servlet.DwrServlet </servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> [/code] --------Service.jave-------- [code="java"] package helloWorld; public class Service { public String sayHello(String yourname){ return "hello world "+yourname; } } [/code] 最后我想说明的是,我在做jsp之前,进行过dwr测试,就是说,我访问http://localhost:8080/HelloWorldTest/dwr是能看到Service的,并且点击进去能看到它的sayHello方法的。
jquery一直返回error
<p> </p> <div> <img alt="">$.ajax({</div> <pre name="code" class="js"> async : true, cache : false, type : 'POST', dataType : "json", url : "person/login",// 请求的action路径 data : { "person.username" : $("#username").val(), "person.password" : $("#password").val() }, error : function() {// 请求失败处理函数 alert('请求失败'); }, success : function(data) { // 请求成功后处理函数。 if (data == null) { $("#login_msg").html("登录成功"); window.location = "index.jsp"; } else if (data.errorMsg != null) {// 后台异常处理 $("#login_msg").html(data.errorMsg); } } });</pre> <p> </p> <p>后台的action可以接收到username和 password;但之后一直返回error,弹出“请求失败”对话框,这是怎么回事呢?</p>
ext editorGrid 问题
我从网上看到editorGrid的一个实例,就下了下来,想学习一下,结果出现以下问题 添加用户时,id先是和最后一个id一样后来又成了始终为1了 显示数据时,总有和数据条数相同书目的空白条 [img]http://dl.iteye.com/upload/attachment/175952/13b30933-c726-36ee-b3c4-57016d5dde4b.jpg[/img] [code="java"]/** * 在线通讯录制作: 刘长炯 beansoft@126.com http://beansoft.blogjava.net/ 2008年5月 */ // 定义一个用户对象,这样便于我们动态的添加记录,虽然也可以设置成匿名内置对象 var User = Ext.data.Record.create([ // 下面的 "username" 匹配读到的标签名称 { name : 'id', type : 'int' }, { name : 'user' }, { name : 'password' } ]); /** * 创建文本列模型. * * @param {ID} * _id * @param {列名显示文本} * _header * @param {数据ID} * _dataIndex * @param {宽度} * _width 可选 * @param {是否为空} * notBlank 可选 * @param {渲染器} * _renderer 可选 * @param {自定义修改器} * _editor 可选 */ function createTextColumn(_id, _header, _dataIndex, _width, notBlank, _renderer, _editor) { var object = { id : _id, header : _header, dataIndex : _dataIndex, width : _width }; if (_editor) { object.editor = _editor; } else if (notBlank == true) { object.editor = new Ext.form.TextField({ allowBlank : false // 不能为空 }); } else { object.editor = new Ext.form.TextField(); } if (_renderer) { object.renderer = _renderer; } return object; } /** * 快速创建文本列 * * @param {数据ID} * _dataIndex * @param {列名显示文本} * _header * @param {宽度} * _width 可选 * @return {列对象} */ function qCreateColumn(_dataIndex, _header, _width) { return createTextColumn(_dataIndex, _header, _dataIndex, _width); } Ext.onReady(function() { Ext.QuickTips.init(); // 格式化日期显示 function formatDate(value) { return value ? value.dateFormat('Y, M d') : ''; } // 格式化性别显示,这是个 renderer, 渲染器 function formatSex(value) { return value ? "男" : "女"; } // 弄个缩写的别名 var fm = Ext.form; // 列模型定义了表格所有列的信息, // dataIndex 将特定的列映射到数据源(Data Store)中的数据列(在后面创建) var cm = new Ext.grid.ColumnModel([ { id : 'id', header : "编号", dataIndex : 'id', width : 50 }, /* * { id : 'username', header : "姓名", dataIndex : 'username', width : * 250, editor : new fm.TextField({ allowBlank : false // 不能为空 }) } */ createTextColumn('username', '姓名', 'user', 50, true), createTextColumn('password', '密码', 'password', 50, true) ]); // 默认情况下列是可排序的 cm.defaultSortable = true; // 创建 Data Store var store = new Ext.data.Store({ // 使用 HTTP 加载 url : 'nb_xml.jsp', // 因为返回值是 XML, 所以我们创建一个解析器 reader : new Ext.data.XmlReader({ // 记录必须包含 "user" 标签 record : 'user' }, User), sortInfo : { field : 'username', direction : 'ASC' }// 排序信息 }); // 创建编辑器表格 var grid = new Ext.grid.EditorGridPanel({ store : store, cm : cm, renderTo : 'editor-grid', width : 500, height : 300, autoExpandColumn : 'username', title : '通讯录',// 标题 frame : true, clicksToEdit : 2,// 设置点击几次才可编辑 selModel : new Ext.grid.RowSelectionModel({ singleSelect : false }),// 设置单行选中模式, 否则将无法删除数据 // 顶部工具栏按钮 tbar : [ { text : '添加用户', iconCls : 'add',// 按钮图标的CSS名称 handler : function() {// 点击按钮执行的操作 var n = grid.getStore().getCount();// 获得总行数 // 显示等待对话框 Ext.Msg.wait("请等候", "添加用户", "操作进行中..."); // 调用 DWR 进行添加操作, 操作完成后调用方法来更新界面 JUserManagerNB.addUser('user' + n , function(data) { if (data) { Ext.Msg.hide();// 隐藏对话框 var p = new User({ id : data, username : 'user'+n , password:'user' }); grid.stopEditing();// 停止编辑 store.insert(n, p);// 插入到最后一行 grid.startEditing(n, 1);// 开始编辑1单元格 } }); } }, { text : '导出为Excel格式', iconCls : 'details', handler : function() { document.location = "nb_excel.jsp"; } }, { text : '删除所选', iconCls : 'remove', handler : function() { var record = grid.getSelectionModel().getSelected();// 返回值为 // Record 类型 if (!record) { Ext.Msg.alert("提示", "请先选择要删除的行!"); return; } // 弹出对话框警告 if (record) { Ext.MessageBox.confirm('确认删除', '你真的要删除所选用户吗?', function(btn) { if (btn == 'yes') {// 选中了是按钮 // 调用 DWR, 执行结果成功时方删除所有数据 // 显示等待对话框 Ext.Msg.wait("请等候", "删除用户", "操作进行中..."); JUserManagerNB.removeUser(record.get("id"), function(data) { if (data) { // 更新界面, 来真正删除数据 store.remove(record); Ext.Msg.hide();// 隐藏对话框 } else { Ext.Msg.alert("出错了!", "单个用户数据删除失败!"); } }); } }); } } } ] }); // 单元格编辑后事件处理 grid.on("afteredit", afterEdit, grid); // 事件处理函数 function afterEdit(e) { var record = e.record;// 被编辑的记录 // 显示等待对话框 Ext.Msg.wait("请等候", "修改中", "操作进行中..."); // 调用 DWR, 执行结果成功时方删除所有数据 JUserManagerNB.editUser(record.get("id"), e.field, e.value, function(data) { if (data) { // 更新界面, 来真正删除数据 // Ext.Msg.alert('您成功修改了用户信息', "被修改的用户是:" // + e.record.get("username") + "\n 修改的字段是:" // + e.field);// 取得用户名 Ext.Msg.hide();// 隐藏对话框 // // 更改最后更新的时间,同步到后台 // JUserManagerNB.editUser(record.get("id"), 'modified', // (new Date()).clearTime()); // 更新界面 record.set('modified', (new Date()).clearTime()); } else { Ext.Msg.alert("出错了!", "修改数据失败,将重置为修改前的值!", function() { record.set(e.field, e.originalValue); }); } }); }; // 触发数据加载 store.load(); }); [/code]
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Elastic:菜鸟上手指南
您们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。 我们可以按照如下的步骤来学习: 1) Elasticsearch简介:对Elasticsearch做了一个简单的介绍 2) Elasticsearch中的一些重要概念:cluster, n
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
Java知识体系最强总结(2020版)
更新于2020-01-05 18:08:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 整理的Ja
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我
复习一周,京东+百度一面,不小心都拿了Offer
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前言 还记得我上周说的重庆邮电研二的读者么? 、 知道他拿了Offer之后我也很开心,我就想把它的面试经历和面试题分享出来
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前言 很多次小伙伴问到学习方法,我也很想写这样的一篇文章来跟大家讨论下关于学习方法这件事情。 其实学习方法这个事情,我没啥发言权
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了......,这可都是提升你幸福感的高效率生产力工具哦! 走起!...... NO、1 ScreenToGif 屏幕,摄像头和
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦......,嗯,我们导员是所有导员中最帅的一个,真的...... 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强......,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧?
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每
史上最全的IDEA快捷键总结
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 相关文章: Idea 中最常用的10款插件,提高开发效率 Eclipse 最牛逼的 10 组快捷键,提高开发效率
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
【综合篇】浏览器的工作原理:浏览器幕后揭秘
web(给达达前端加星标,提升前端技能) 了解浏览器是如何工作的,能够让你站在更高的角度去理解前端 浏览器的发展历程的三大路线,第一是应用程序web化,第二是web应用移动化,第三是web操作系统化。是不是有点不直白。 应用程序web化就是随着现在技术的发展,现在越来越多的应用转向了浏览器与服务器,就是B/S架构;web应用移动化,就是在移动设备应用,什么是移动设备呢。 “移动设备:
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
死磕Lambda表达式(二):Lambda的使用
在哪使用Lambda表达式?怎么样正确的使用Lambda表达式?
史上最牛逼的 Eclipse 快捷键,提高开发效率!
如果你在使用IDEA,请参考博主另外的一篇idea快捷键的博客。
在三线城市工作爽吗?
我是一名程序员,从正值青春年华的 24 岁回到三线城市洛阳工作,至今已经 6 年有余。一不小心又暴露了自己的实际年龄,但老读者都知道,我驻颜有术,上次去看房子,业务员肯定地说:“小哥肯定比我小,我今年还不到 24。”我只好强颜欢笑:“你说得对。” 从我拥有记忆到现在进入而立之年,我觉得,我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年,把这位女同学追到...
CSS操作之你不得不知的一些小技巧(一)ヾ(Ő∀Ő๑)ノ太棒了!!
目录 CSS单行/多行文本,超出隐藏并显示省略号 1. CSS单行/多行文本,超出隐藏并显示省略号 方法一:使用CSS属性 单行文本溢出显示省略号 width: 100px; overflow: hidden; text-overflow:ellipsis; //文本溢出显示省略号 white-space: nowrap; //文本不会换...
强烈推荐 10 款珍藏的 Chrome 浏览器插件
Firebug 的年代,我是火狐(Mozilla Firefox)浏览器的死忠;但后来不知道为什么,该插件停止了开发,导致我不得不寻求一个新的网页开发工具。那段时间,不少人开始推荐 Chrome 浏览器,我想那就试试吧,期初我觉得用起来很别扭,毕竟我不是一个“喜新厌旧”的人。但用的次数越来越多,也就习惯了。 Chrome 浏览器有一个好处,就是插件极其丰富,只有你想不到的,没有你找不到的,这恐怕是...
我以为我对数据库索引十分了解,直到我遇到了阿里面试官。
索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
Java程序员都需要懂的「反射」
前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 今天来简单写一下Java的反射。本来没打算写反射这个知识点的,只是不少的读者都问过我:“你的知识点好像缺了反射阿。能不能补一下?” 这周末也有点空了,所以来写写我对反射的简单理解。这篇是入门文章,没有高深的知识点,希望能对新人有帮助。如果...
史上最牛逼的 VSCode 插件,提高开发效率!
这篇文章收集了一些常用的vscode插件,提高开发效率。
Java第二周学习
Java第二周学习 1. 数组 1.1 定义数组格式 数据类型[] 数组名 = new 数据类型[容量]; int[] arr = new int[10]; 赋值左侧 数据类型: 告知编译器,当前数组中能够保存的数据类型到底是什么?并且在确定数据类型之后,整个数组中保存的数据类型无法修改!!! []: 告知编译器这里定义的是一个数组类型数据。 明确告知编译器,数组名是一个【引用数据类型...
有没有简单一点的 Python 小例子或小项目?
分享一波Github上适合新手入门、又十分有趣的Python项目~ 1. 人脸识别 star:30.5k 最简洁的人脸识别库。可以使用Python和命令行工具提取、识别、操作人脸。其人脸识别是基于业内领先的C++开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,准确率高达99.38%。 而且有中文版README哟~ 2. faceai sta...
看完这篇JVM,阿里面试官都不怕!
前言 只有光头才能变强 本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 学习JVM的目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干的。能够理解到一些初学时不懂的东西 在面试的时候有谈资 能装逼 (图片来源:https://zhuanlan.zhihu.com/p/25511795,侵删) 声...
隆重向你推荐这 8 个开源 Java 类库
昨天在青铜时代群里看到读者朋友们在讨论 Java 最常用的工具类,我觉得大家推荐的确实都挺常见的,我自己用的频率也蛮高的。恰好我在 programcreek 上看到过一篇类似的文章,就想着梳理一下分享给大家。 在 Java 中,工具类通常用来定义一组执行通用操作的方法。本篇文章将会向大家展示 8 个工具类以及它们最常用的方法,类的排名和方法的排名均来自可靠的数据,从 GitHub 上最受欢迎的 ...
Java基础知识面试题(2020最新版)
文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问