获取table中被修改的值以及对应的id

一个table里给每一个td设置id,当按钮点击时如何获取td中所有被修改的值以及对应的id,没有被修改的则不获取

18个回答

$.each($('table tr td').function(){ })循环遍历,在里面判断当前的值跟之前后台穿过来的值是不是相同,不相同就获取当前的值以及id,

在修改的时候给对应td赋上一个标识,这样就可以区别了

wuxiaoxuan13
wuxiaoxuan13 回复子幽: 啊啊啊
大约 2 年之前 回复
qq_37524684
子幽 然后你又加过id,就可以根据地获取单独每一项的值
大约 2 年之前 回复
qq_37524684
子幽 你这儿不建议用id反而class更好,只要改变了就加一个class,获取加了class的项之外的项的值
大约 2 年之前 回复
qq_35677770
qq_35677770 设置了标识指的是设置td中的id么,如何判断这个td值是否发生了改变?
大约 2 年之前 回复

建议你先给修改的值的td设置一个标识,这样你就可以根据这个标识来获取相应的值和id了

HeyMen_
HeyMen_ 回复weixin_35133008: /
大约 2 年之前 回复
weixin_35133008
weixin_35133008 给修改的td给予一个标识,然后通过或$("td[flag=你的标识]").attr(id) 和value
大约 2 年之前 回复
qq_35677770
qq_35677770 设置了标识指的是设置td中的id么,如何判断这个td值是否发生了改变?
大约 2 年之前 回复
$(function(){ //用jQuery获取table中td值 $("#mytable td").click(function(){ alert("table td值:"+$(this).text()); }); //jQuery获取table中点击位置所在行的id $("#mytable td").click(function() { //td的id alert($(this).attr("id")); //tr的id alert($(this).parent().attr("id")); }); });
qq_35677770
qq_35677770 你这个是获取td中的值,还没有修改就触发了,我要的是被修改完之后,获取所有被修改的值,未修改的则不获取
大约 2 年之前 回复

在修改的时候给对应td赋上一个标识,这样就可以区别了

qq_35677770
qq_35677770 设置了标识指的是设置td中的id么,如何判断这个td值是否发生了改变?
大约 2 年之前 回复

一个table里给每一个td设置id,当按钮点击时如何获取td中所有被修改的值以及对应的id,没有被修改的则不获取

//1、原数据做一个备份,作为校验或后期使用;
//2、可以通过jquery的筛选进行查找,如果你的修改后是有标识的,
直接查找标识
$('table').find('td').attr('标识')
或者直接循环所有的td进行查找
(比如:$.each($('table tr td').function(){ //这里 });

都说了设置统一标识,然后根据修改过的标志去获取这个标识的id,这个id并不是标识.

修改前把table 的所有tb 的 id 和值存放在window.localStorage。修改后再循环比对,找被修改的值

你试一下在页面第一次加载的时候把修改前的所有值放在一块隐藏域中,
然后你修改之后,点击按钮的时候就可以同事获取隐藏域的值和修改后的对比了
建议使用document.getElementsByTagName()

思路,获得你按钮说在的td的兄弟节点,遍历获取td的内容

共18条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
页面使用bootstrap的remote: url弹出一个表单模态框,为什么关闭后bootstrap Table获取不到当前选中行的数据了?
``` ``` ``` 第一次点击修改,能获取到列表选中行数据的ID,弹窗正常,然后关闭弹窗,什么都不动再次点击修改,却获取不到选中行的ID了,获取到的ID居然是table的id,之后再怎么切换选中的行数据,获取的ID都变成table 的ID,郁闷啊,一直找不到问题出在哪。 直接上代码,列表使用的是bootstrapTable,如下是列表的jsp代码: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>角色表列表</title> </head> <body style="overflow-x: hidden;overflow-y: auto"> <div id="page-inner"> <div class="row"> <div class="col-md-12"> <h1 style="margin: 1px 0 2px"> <small>角色表</small> </h1> </div> </div> <!-- /. ROW --> <div id="toolbar" style="margin-left: 3px;"> <a href="javascript:void(0);" class="btn btn-primary btn-sm" id="addForm"><i class="glyphicon glyphicon-plus"></i>新增</a> <a href="javascript:void(0);" class="btn btn-success btn-sm" id="editForm"><i class="glyphicon glyphicon-pencil"></i>修改</a> <a href="javascript:void(0);" class="btn btn-danger btn-sm" id="deleteData"><i class="glyphicon glyphicon-remove"></i>删除</a> </div> <table class="table table-bordered table-hover" id="roleTable"> </table> </div> <!-- 模态框 --> <div id="formModal" class="modal fade bs-example-modal-lg" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div id="formContent" class="modal-content"> </div> </div> </div> <!-- /.modal --> </body> </html> # // 下面是点击 修改 时的方法: $("#editForm").click(function(){ var id=""; var a= $('#roleTable').bootstrapTable('getSelections'); if(a.length==1){ id=a[0].id; }else{ layer.msg("只能选中一行数据进行修改!", {icon: 0}); return; } var url="/system/xxx/addForm?id="+id; $("#formModal").removeData("bs.modal"); $("#formModal").modal({ remote: url }); }); 下面为url对应的jsp页面: <%@ page language="java" contentType="text/html;charset=UTF-8"%> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span> </button> <h4 class="modal-title" id="myModalLabel">表信息</h4> </div> <form id="roleForm" class="form-horizontal form-label-left" novalidate> <input type="hidden" id="id" name="id" value="${role.id }"/> <input type="hidden" id="tempFileId" name="tempFileId" value="${role.id }"/> <div class="modal-body"> ....表单.....略... </div> <div class="m ```odal-footer" style="text-align: center;"> <button type="button" class="btn btn-danger" onclick="save();">保存</button> <but ```ton type="button" class="btn btn-primary" data-dismiss="modal">取消</button> </div> </form>
实用jquery实现动态拼装json数组中的内容拼装table
现有如下数组 Var json= [{"did":1,"businessType":"2-理赔","weekday":"2-周二","startTimeStr":"11:57:48","endTimeStr":"11:57:49","reserveNum":"11","branchCode":"8636","panelCode":"123"}, {"did":2,"businessType":"2-理赔","weekday":"2-周二","startTimeStr":"12:57:48","endTimeStr":"12:57:49","reserveNum":"22","branchCode":"8636","panelCode":"123"}, {"did":3,"businessType":"2-理赔","weekday":"3-周三","startTimeStr":"13:57:48","endTimeStr":"13:57:49","reserveNum":"33","branchCode":"8636","panelCode":"123"}, {"did":4,"businessType":"4-新契约","weekday":"4-周四","startTimeStr":"14:57:48","endTimeStr":"14:57:49","reserveNum":"44","branchCode":"8636","panelCode":"123"} ] =======================字段注释如下 businessType:业务类型 weekday:周期 startTimeStr- endTimeStr:时间段 可预约数:reserveNum -----业务类型对应关系 1 保全 2 理赔 3 投诉 4 新契约 5 产品销售 6 保全受理 7 保全处理 9 法人保全 10 续期业务 11 财务 12 其他 13 咨询 --周期对应关系 1 周一 2 周二 3 周三 4 周四 5 周五 6 周六 7 周日 *********************************实现效果,根据json数组实现如下table效果,实用jquery动态拼装,解析json实现效果,**已经实现,但有两个问题, 1、如果业务类型 相同个数超过3个,则表格会乱掉(如同时添加3个 业务类型为:理赔) 2、如果业务类型对应码大于 10 ,则表格会乱掉(如选择 10 续期业务或11财务等) ** 实现代码如下, function myCallBackDetailAdd(json1){ var even = 0; var odd = 1; $.each(json1,function(){ var businessType = this.businessType.split('-'); var weekDay = this.weekday.split('-'); //业务范围中文 var btext = businessType[1]; //业务范围value var bid = parseInt(businessType[0]); //周期中文 var text = weekDay[1]; //周期value var id = parseInt(weekDay[0]); //时间段 var time = this.startTimeStr+"-"+this.endTimeStr; //可预约数 var num = this.reserveNum; //删除使用的id var didarg =parseInt(this.did); //第一行 var interHtmlweek1 = "<th id=th"+id+" colspan='3'>"+text+"</th>"; //第二行 var interHtmlweek2 = "<th id=th"+id+">时间段</th>"+"<th id=th"+id+">可预约数</th>"+"<th id=th"+id+">操作</th>"; var interHtmlweek3 = "<td id=td"+id+">"+time+"</td>"+"<td id=td"+id+">"+num+"</td>"+"<td id=td"+id+">"+ "<a title='修改' href='css/reserveInfo/reserveInfoAddModify_reserveInfoAction.action' maxable='true' minable='true' resizable='true' width='450' height='200' target='dialog' onclick='modifyReserveDetail(this,"+id+","+didarg+");' class='btnEdit' >修改</a>"+ "<a id='delButton' title='删除' onclick='delReserveDetail(this,"+id+","+didarg+");' class='btnDel' >删除</a>"+ "</td>"; //排序td,th $('#theadAdd tr#tr0 th:gt(0)').each(function(){ var thIndex = $(this).attr('id').substr(2,3); if(parseInt(thIndex)>parseInt(id)&&($("#theadAdd tr#tr0 th#th"+id).length==0)){ $(interHtmlweek1).insertBefore("#theadAdd tr#tr0 th#th"+thIndex+":eq(0)"); $(interHtmlweek2).insertBefore("#theadAdd tr#tr1 th#th"+thIndex+":eq(0)"); $(interHtmlweek3).insertBefore("#tbodyAdd tr#bodyTr"+bid+even+" td#td"+thIndex+":eq(0)"); }else if(parseInt(thIndex)==parseInt(id) && $("#theadAdd tr#tr0 th#th"+id).length>0 && $("#tbodyAdd tr#bodyTr"+bid+even+" td#td"+id).length >0){ /* $("#tbodyAdd tr#bodyTr"+bid+even).attr("rowspan","2");*/ if($("#tbodyAdd tr#bodyTr"+bid+odd).length ==0){ $("#tbodyAdd tr#bodyTr"+bid+even+" td:eq(0)").attr("rowspan","2"); $("<tr height='25' id=bodyTr"+bid+odd+" align='center' bgcolor='white'>"+"</tr>").insertAfter("#tbodyAdd tr#bodyTr"+bid+even); $("#tbodyAdd tr#bodyTr"+bid+odd).append(interHtmlweek3).initUI(); }else{ $("#tbodyAdd tr#bodyTr"+bid+odd).append(interHtmlweek3).initUI(); } }else if( parseInt(thIndex)>parseInt(id)&&($("#tbodyAdd tr#bodyTr"+bid+even+" td#td"+id).length ==0)){ $(interHtmlweek3).insertBefore("#tbodyAdd tr#bodyTr"+bid+even+" td#td"+thIndex+":eq(0)"); } }); if($("#tbodyAdd tr#bodyTr"+bid+even).length==0){ //添加一行 $("#tbodyAdd").append("<tr height='25' id=bodyTr"+bid+even+" align='center' bgcolor='white'>"+"</tr>"); $("#tbodyAdd tr#bodyTr"+bid+even).append("<td id=td"+bid+id+">"+"<div>"+btext+"</div>"+"</td>"); } //添加第一第二行的列 if($("#theadAdd tr#tr0 th#th"+id).length==0){ $('#theadAdd tr#tr0').append(interHtmlweek1); $('#theadAdd tr#tr1').append(interHtmlweek2); } if($("#tbodyAdd tr#bodyTr"+bid+even+" td#td"+id).length==0){ $("#tbodyAdd tr#bodyTr"+bid+even).append(interHtmlweek3).initUI(); }; }); $("#tbodyAdd tr").each(function(i){ //获取每行的id var tr = $("#tbodyAdd tr"+":eq("+i+")").attr('id').substr(6,8); $('#theadAdd tr#tr0 th:gt(0)').each(function(k){ //获取周期的id var Index = $(this).attr('id').substr(2,3); //获取每行添值相同id的第一列id if($("#tbodyAdd tr"+":eq("+i+")"+" td:eq(0)").attr("id").length ==4){ if($("#tbodyAdd tr"+":eq("+i+")"+" td"+":eq("+(3*k+1)+")").length==0){ var dd = $("#tbodyAdd tr"+":eq("+i+")"+" td"+":eq("+(3*k-2)+")").attr('id').substr(2,3); $("<td id=td"+Index+">"+"</td>"+"<td id=td"+Index+">"+"</td>"+"<td id=td"+Index+">"+"</td>").insertAfter("#tbodyAdd tr#bodyTr"+tr+" td#td"+dd+":eq(2)"); }else{ $("#tbodyAdd tr"+":eq("+i+")"+" td"+":eq("+(3*k+1)+")").each(function(){ var td = $("#tbodyAdd tr"+":eq("+i+")"+" td"+":eq("+(3*k+1)+")").attr('id').substr(2,3); if(parseInt(Index) < parseInt(td)){ $("<td id=td"+Index+">"+"</td>"+"<td id=td"+Index+">"+"</td>"+"<td id=td"+Index+">"+"</td>").insertBefore("#tbodyAdd tr#bodyTr"+tr+" td#td"+td+":eq(0)"); } }); } }else{ if($("#tbodyAdd tr"+":eq("+i+")"+" td"+":eq("+(3*k)+")").length==0){ var dd = $("#tbodyAdd tr"+":eq("+i+")"+" td"+":eq("+(3*k-1)+")").attr('id').substr(2,3); $("<td id=td"+Index+">"+"</td>"+"<td id=td"+Index+">"+"</td>"+"<td id=td"+Index+">"+"</td>").insertAfter("#tbodyAdd tr#bodyTr"+tr+" td#td"+dd+":eq(2)"); }else{ $("#tbodyAdd tr"+":eq("+i+")"+" td"+":eq("+(3*k)+")").each(function(){ var td = $("#tbodyAdd tr"+":eq("+i+")"+" td"+":eq("+(3*k)+")").attr('id').substr(2,3); if(parseInt(Index) < parseInt(td)){ $("<td id=td"+Index+">"+"</td>"+"<td id=td"+Index+">"+"</td>"+"<td id=td"+Index+">"+"</td>").insertBefore("#tbodyAdd tr#bodyTr"+tr+" td#td"+td+":eq(0)"); } }); } } }); }); //清空json数组 json.splice(0,json.length); } 实现效果图如下: ![图片说明](https://img-ask.csdn.net/upload/201509/04/1441354935_70702.png)
layui的分页+模糊查询
layui.use('upload', function(){ var upload = layui.upload; var $ = layui.jquery layui.use('table', function(){ var table = layui.table,//表格 laypage = layui.laypage,//分页 layer = layui.layer; //弹层 //执行一个 table 实例 table.render({ elem: '#kwgroup_table', height: 620, url: '/spRestCon/findShangPin', //数据接口 title: '商品表', page: true, //开启分页 toolbar: 'default', //开启工具栏,此处显示默认图标,可以自定义模板,详见文档 //totalRow: true, //开启合计行 cols: [[ //表头 //fixed: 'left', {field: 'id', title: '商品ID',sort: true, width:50}, {field: 'productName', title: '商品名称', width:100}, {field: 'money', title: '商品价格', width: 80}, {field: 'createdate', title: '添加时间', width:110}, {fixed: 'right',title:'商品信息操作', width: 135, align:'center', toolbar: '#operation'} ]] }); //分页 laypage.render({ elem : 'paging', // 分页容器的id skin : '#1E9FFF', // 自定义选中色值 jump : function(obj, first) { if (!first) { layer.msg('第' + obj.curr + '页', { offset : 'b' }); } } }); //监听行工具事件 table.on('tool(kwgroup_table)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值" var data = obj.data //获得当前行数据 ,layEvent = obj.event; //获得 lay-event 对应的值 if(layEvent === 'del'){ var delId=data.id; layer.confirm('是否删除此商品', function(index){ obj.del(); //删除对应行(tr)的DOM结构 layer.close(index); //向服务端发送删除指令 $.get("","id="+delId,function(rv){ if(rv.falg==false){ layer.msg('删除失败'); }else{ layer.msg('已删除'); } }); }); } else if(layEvent === 'edit'){ layer.confirm('选择操作', { btn: ['添加', '修改', '取消'] //可以无限个按钮 ,btn1: function(index, layero){ layer.msg('按钮1'); },btn2: function(index, layero){ layer.msg('按钮2'); } }); }else if(layEvent === 'upd'){ layer.msg('编辑操作'); } }); }); $('#btn').click(function(){ var spName=$("#spName").val().trim(); var page=$(".layui-laypage-limits").find("option:selected").val();//获取分页数目 var limit=$(".layui-laypage-em").next().html();//获取当前页码值 alert(page); alert(limit); if(spName==null){ alert(spName); }else{ $.get("/spRestCon/findShangPin", "productName="+spName+ "&page="+page+ "&limit="+limit, function(rv){ },"json"); } }); }); 我把文本框写入的值传到后台拿到返回值之后怎么展示模糊查询的数据? 是把上面那一片layui的模板代码把他们放在一个方法体里在拿到返回值的ajax方法体里调用还是怎么弄? SOS~
easyui datagrid中combobox的问题
如下图: ![图片说明](https://img-ask.csdn.net/upload/201506/27/1435398138_950017.png) 这是后台编辑页面,作用为新闻的管理(新闻实体的字段“是否在前台显示”的值只有“是”和“否”)。 我想让“是否在首页显示”这一列下面都有一个combobox,默认值为数据库中真实的值。如果某条新闻的这个字段值为“是”,则对应的combobox还有一个值为“否”的option,反之对应的combobox还有一个值为“是”的option。 从网上找了一段代码实现不了,请问该如何改呢?求大神帮忙! //实现新闻DataGird控件的绑定操作 function initTable(queryData) { $('#test').datagrid({ //定位到Table标签,Table标签的ID是test fitColumns: true, url: '/News/QueryAllNews', //指向后台的Action来获取当前用户的信息的Json格式的数据 title: '新闻公告', //标识 iconCls: 'icon-save', height: 368, nowrap: true, autoRowHeight: false, striped: true, collapsible: true, pagination: true, rownumbers: true, //sortName: 'ID', //根据某个字段给easyUI排序 sortOrder: 'asc', remoteSort: false, idField: 'NewsID', queryParams: queryData, //异步查询的参数 columns: [[ { field: 'ck', checkbox: true }, { title: '主键', field: 'NewsID', sortable: true, hidden: true, }, { title: '内容标题', field: 'NewsTitle', width: 50, sortable: true }, { title: '具体内容', field: 'NewsContent', sortable: true, hidden: true, }, { title: '创建时间', field: 'TimeStamp', sortable: true, }, { title: '所属类别', field: 'CategoryName', sortable: true, }, { title: '创建人', field: 'UserName', sortable: true }, { title: '是否在首页显示', field: 'IsEnable', align: 'center', editor: { type: 'combobox', options: { data: [{ value: '是', text: '是', 'selected': 'true' }, { value: '否', text: '否' }], panelHeight: 'auto' } }, sortable: true } ]], toolbar: [{ id: 'btnadd', text: '添加', iconCls: 'icon-add', handler: function () { //实现弹出注册信息的页面 AddNews(); } }, '-', { id: 'btncut', text: '修改', iconCls: 'icon-cut', handler: function () { //实现修改的方法 UpdateLzjs(); } }, '-', { id: 'btnCancle', text: '删除', iconCls: 'icon-remove', handler: function () { //实现直接删除所有数据的方法 DeleteLzjs(); } }] }); }
PHP数组取值的奇怪问题,哪位帮忙给看看,谢谢~
在拉取微信用户信息写入数据库的过程中,遇到一个奇怪的问题,折磨了我一天了,希望哪位高人给看一下,在通过接口获取到微信用户的信息后,使用网上找的一个数据库操作类写入数据表,在数据库操作类的insert函数中有个检查传入数组元素是否为空的判断,只要去掉它,就获取不到数组数据了,加上它就有,奇怪了 wx.php ``` include "dbMysqli.class.php"; $db=ConnectMysqli::getIntance(); $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$_SESSION['token']['access_token']."&openid=".$_SESSION['token']['openid']."&lang=zh_CN"; $res = https_request($url); $resArr = json_decode($res, true); $data = array("openID"=>"{$resArr['openid']}","nickName"=>"{$resArr['nickname']}","city"=>"{$resArr['city']}","province"=>"{$resArr['province']}","country"=>"{$resArr['country']}","headImgUrl"=>"{$resArr['headimgurl']}"); $db->insert('tb_users',$data); } ``` dbMysqli.class.php ``` <?php header('content-type:text/html;charset=utf-8'); /* 掌握满足单例模式的必要条件 (1)私有的构造方法-为了防止在类外使用new关键字实例化对象 (2)私有的成员属性-为了防止在类外引入这个存放对象的属性 (3)私有的克隆方法-为了防止在类外通过clone成生另一个对象 (4)公有的静态方法-为了让用户进行实例化对象的操作 */ class ConnectMysqli{ //私有的属性 private static $dbcon=false; private $host; private $port; private $user; private $pass; private $db; private $charset; private $link; //私有的构造方法 private function __construct($config=array()){ $this->host = isset($config['host']) ? $config['host'] : 'localhost'; $this->port = isset($config['port']) ? $config['port'] : '3306'; $this->user = isset($config['user']) ? $config['user'] : 'root'; $this->pass = isset($config['pass']) ? $config['pass'] : ''; $this->db = isset($config['db']) ? $config['db'] : 'db_uplus'; $this->charset=isset($arr['charset']) ? $arr['charset'] : 'utf8'; //连接数据库 $this->db_connect(); //选择数据库 $this->db_usedb(); //设置字符集 $this->db_charset(); } //连接数据库 private function db_connect(){ $this->link=mysqli_connect($this->host.':'.$this->port,$this->user,$this->pass); if(!$this->link){ echo "数据库连接失败<br>"; echo "错误编码".mysqli_errno($this->link)."<br>"; echo "错误信息".mysqli_error($this->link)."<br>"; exit; } } //设置字符集 private function db_charset(){ mysqli_query($this->link,"set names {$this->charset}"); } //选择数据库 private function db_usedb(){ mysqli_query($this->link,"use {$this->db}"); } //私有的克隆 private function __clone(){ die('clone is not allowed'); } //公用的静态方法 public static function getIntance(){ if(self::$dbcon==false){ self::$dbcon=new self; } return self::$dbcon; } //执行sql语句的方法 public function query($sql){ $res=mysqli_query($this->link,$sql); if(!$res){ echo "sql语句执行失败<br>"; echo "错误编码是".mysqli_errno($this->link)."<br>"; echo "错误信息是".mysqli_error($this->link)."<br>"; } return $res; } //打印数据 public function p($arr){ echo "<pre>"; print_r($arr); echo "</pre>"; } public function v($arr){ echo "<pre>"; var_dump($arr); echo "</pre>"; } //获得最后一条记录id public function getInsertid(){ return mysqli_insert_id($this->link); } /** * 查询某个字段 * @param * @return string or int */ public function getOne($sql){ $query=$this->query($sql); return mysqli_free_result($query); } //获取一行记录,return array 一维数组 public function getRow($sql,$type="assoc"){ $query=$this->query($sql); if(!in_array($type,array("assoc",'array',"row"))){ die("mysqli_query error"); } $funcname="mysqli_fetch_".$type; return $funcname($query); } //获取一条记录,前置条件通过资源获取一条记录 public function getFormSource($query,$type="assoc"){ if(!in_array($type,array("assoc","array","row"))) { die("mysqli_query error"); } $funcname="mysqli_fetch_".$type; return $funcname($query); } //获取多条数据,二维数组 public function getAll($sql){ $query=$this->query($sql); $list=array(); while ($r=$this->getFormSource($query)) { $list[]=$r; } return $list; } /* * 定义添加数据的方法 * @param string $table 表名 * @param string orarray $data [数据] * @return int 最新添加的id */ public function insert($table,$data){ //遍历数组,得到每一个字段和字段的值 $key_str=''; $v_str=''; foreach($data as $key=>$v){ if(empty($v)){ die("insert data error"); } //$key的值是每一个字段s一个字段所对应的值 $key_str.=$key.','; $v_str.="'$v',"; } $key_str=trim($key_str,','); $v_str=trim($v_str,','); //判断数据是否为空 $sql="insert into $table ($key_str) values ($v_str)"; $this->query($sql); //返回上一次增加操做产生ID值 return $this->getInsertid(); } /* * 删除一条数据方法 * @param1 $table, $where=array('id'=>'1') 表名 条件 * @return 受影响的行数 */ public function deleteOne($table, $where){ if(is_array($where)){ foreach ($where as $key => $val) { $condition = $key.'='.$val; } } else { $condition = $where; } $sql = "delete from $table where $condition"; $this->query($sql); //返回受影响的行数 return mysqli_affected_rows($this->link); } /* * 删除多条数据方法 * @param1 $table, $where 表名 条件 * @return 受影响的行数 */ public function deleteAll($table, $where){ if(is_array($where)){ foreach ($where as $key => $val) { if(is_array($val)){ $condition = $key.' in ('.implode(',', $val) .')'; } else { $condition = $key. '=' .$val; } } } else { $condition = $where; } $sql = "delete from $table where $condition"; $this->query($sql); //返回受影响的行数 return mysqli_affected_rows($this->link); } /** * [修改操作description] * @param [type] $table [表名] * @param [type] $data [数据] * @param [type] $where [条件] * @return [type] */ public function update($table,$data,$where){ //遍历数组,得到每一个字段和字段的值 $str=''; foreach($data as $key=>$v){ $str.="$key='$v',"; } $str=rtrim($str,','); //修改SQL语句 $sql="update $table set $str where $where"; $this->query($sql); //返回受影响的行数 return mysqli_affected_rows($this->link); } } ?> ```
jsp中如何接收struts1中action中的对象属性值
我做了一个图书修改功能的页面,就是用户点击修改时,就把action中获取到的图书信息在修改页面展示出来,现在action中获取到图书对象的信息,在jsp页面中一直不显示,求大大帮忙,如何解决这个问题,不胜感激 struts1 action 代码 public String ju(ActionForm form, HttpServletRequest request, HttpServletResponse response){ int productid = 0; Product product = new Product(); productForm pform = (productForm) form;//productForm是对应的formbean if(request.getParameter("productid") != null){ productid = Integer.parseInt(request.getParameter("productid")); product = productBiz.getByIdProduct(productid); pform.setProductAmount(product.getProductAmount()); pform.setProductAuthor(product.getProductAuthor()); pform.setProductDate(product.getProductDate().toString()); pform.setProductDprice(product.getProductDprice()); pform.setProductIsbn(product.getProductIsbn()); pform.setProductName(product.getProductName()); pform.setProductNo(product.getProductNo()); pform.setProductPrice(product.getProductPrice()); pform.setProductPublish(product.getProductPublish()); } return "ok"; } struts.xml 配置文件 <action path="/productJump" type="com.tarena.dangdang.web.ProductManage" name="productForm" method="ju"> <forward name="ok" path="/product/productMain.jsp"></forward> </action> jsp页面 <form name="ctl00" method="get" action="addProduct.do" id="f"> <table class="tab_login"> <tr> <td valign="top" class="w1"> 图书编号: </td> <td> <input type="text" class="text_input" name="productNo" id="receiveName" /> </tr> <tr> <td valign="top" class="w1"> 图书名称: </td> <td> <input type="text" name="productName" class="text_input" id="fullAddress" /> </td> </tr> <tr> <td valign="top" class="w1"> 原价: </td> <td> <input type="text" class="text_input" name="productPrice" id="postalCode" /> </td> </tr> <tr> <td valign="top" class="w1"> 现价 </td> <td> <input type="text" class="text_input" name="productDprice" id="phone" /> </td> </tr> <tr> <td valign="top" class="w1"> 出版日期 </td> <td> <input type="text" class="text_input" name="productDate" id="mobile" /> </td> </tr> <tr> <td valign="top" class="w1"> 图书库存 </td> <td> <input type="text" class="text_input" name="productAmount" id="mobile" /> </td> </tr> <tr> <td valign="top" class="w1"> 作者 </td> <td> <input type="text" class="text_input" name="productAuthor" id="mobile" /> </td> </tr> <tr> <td valign="top" class="w1"> 出版社 </td> <td> <input type="text" class="text_input" name="productPublish" id="mobile" /> </td> </tr> <tr> <td valign="top" class="w1"> ISBN </td> <td> <input type="text" class="text_input" name="productIsbn" id="mobile" /> </td> </tr> </table> <div class="login_in"> <a href="#"><input id="btnClientRegister" class="button_1" name="submit" type="reset" value="重置" /></a> <input id="btnClientRegister" class="button_1" name="submit" type="submit" value="添加" /> </div> </form>
求JQ或JS仿京东淘宝属性规格SKU样式
把这个修改成属性值可以在input-text区自定义,删除自定义的值后自动恢复初始属性值。如图所示功能:![图片说明](https://img-ask.csdn.net/upload/201608/13/1471094693_376707.png) ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>生成表格</title> <link rel="stylesheet" type="text/css" href="css/table.css"> <style type="text/css"> .hide {display: none;} .mt10 {margin-top: 10px;} .control-group {overflow: hidden;} .control-group a {color: #666;text-decoration: none;} .control-group a:hover {text-decoration: underline;} .control-label {float: left;width: 100px;line-height: 24px;} .controls {overflow: hidden;} .controls input[type="text"] {border: 1px solid #ddd;height: 20px;width: 120px;} .controls input[type="button"] {margin-top: 10px;height: 32px;cursor: pointer;} .config_item {margin-top: 10px;border: 1px dashed #ddd;padding: 10px;} .config_item section {margin-top: 10px;} .config_item section span {margin-right: 16px;} .config_item input[type="text"] {width: 80px;text-align: center;} .choose_config .Father_Title {margin: 0;margin-bottom: 10px;padding: 0;font-size: 16px;font-weight: normal;display: inline-block;vertical-align: middle;} .choose_config .Father_Item {padding: 0;margin: 0;margin-bottom: 10px;list-style: none;display: inline-block;vertical-align: middle;} .choose_config .Father_Item li {display: inline-block;margin-right: 10px;} .columnList {border-collapse: collapse;} .columnList th {background-color: #eee;} .columnList th,.columnList td {padding: 5px 10px;border: 1px solid #ddd;line-height: 24px;text-align: center;} </style> </head> <body> <!-- 选择信息 --> <div class="control-group choose_config"> <div class="control-label">选择信息:</div> <div class="controls"> <h3 class="Father_Title">颜色:</h3> <ul class="Father_Item Father_Item0"> <li><label><input id="Checkbox0" type="checkbox" class="checkbox check_all" value="全选">全选</label></li> <li><label><input id="Checkbox0" type="checkbox" class="checkbox check_item" value="红色">红色</label></li> <li><label><input id="Checkbox0" type="checkbox" class="checkbox check_item" value="白色">白色</label></li> <li><label><input id="Checkbox0" type="checkbox" class="checkbox check_item" value="土豪金">土豪金</label></li> </ul><br> <h3 class="Father_Title">内存:</h3> <ul class="Father_Item Father_Item1"> <li><label><input id="Checkbox0" type="checkbox" class="checkbox check_all" value="全选">全选</label></li> <li><label><input id="Checkbox1" type="checkbox" class="checkbox check_item" value="32G">32G</label></li> <li><label><input id="Checkbox1" type="checkbox" class="checkbox check_item" value="16G">16G</label></li> </ul><br> <h3 class="Father_Title">尺寸:</h3> <ul class="Father_Item Father_Item2"> <li><label><input id="Checkbox0" type="checkbox" class="checkbox check_all" value="全选">全选</label></li> <li><label><input id="Checkbox2" type="checkbox" class="checkbox check_item" value="5.5">5.5</label></li> <li><label><input id="Checkbox2" type="checkbox" class="checkbox check_item" value="4.5">4.5</label></li> <li><label><input id="Checkbox2" type="checkbox" class="checkbox check_item" value="3.5">3.5</label></li> </ul><br> </div> </div> <!-- 生成表格 --> <div class="control-group mt10"> <div class="control-label">生成表格:</div> <div class="controls" id="createTable"> </div> </div> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> /** * Created by Administrator on 14-12-01. * 模拟淘宝SKU添加组合 * 页面注意事项: * 1、 .Father_Title 这个类作用是取到所有标题的值,赋给表格,如有改变JS也应相应改动 * 2、 .Father_Item 这个类作用是取类型组数,有多少类型就添加相应的类名:如: Father_Item1、Father_Item2、Father_Item3 ... */ $(function() { $(document).on('change', '.choose_config label', function() { var parent=$(this).parents('.Father_Item'); var _this=$('.checkbox',this); // 是否全选 $('.checkbox',parent).each(function() { var bCheck2=true; if (_this.hasClass('check_all')) { if (_this.get(0).checked) { bCheck2=true; $('.check_item',parent).prop('checked', bCheck2); }else{ bCheck2=false; $('.check_item',parent).prop('checked', bCheck2); } return false; } else { if ((!this.checked)&&(!$(this).hasClass('check_all'))) { bCheck2 = false; $('.check_all',parent).prop('checked', bCheck2); return false; } } $('.check_all',parent).prop('checked', bCheck2); }); step.Creat_Table(); }); var step = { // 信息组合 Creat_Table: function() { step.hebingFunction(); var SKUObj = $('.Father_Title'); var arrayTile = new Array(); // 表格标题数组 var arrayInfor = new Array(); // 盛放每组选中的CheckBox值的对象 var arrayColumn = new Array(); // 指定列,用来合并哪些列 var bCheck = true; // 是否全选,只有全选,表格才会生成 var columnIndex = 0; $.each(SKUObj, function(i, item) { arrayColumn.push(columnIndex++); arrayTile.push(SKUObj.eq(i).text().replace(':', '')); var itemName = '.Father_Item' + i; var bCheck2 = true; // 是否全选 // 获取选中的checkbox的值 var order = new Array(); $(itemName + ' .check_item:checked').each(function() { order.push($(this).val()); }); arrayInfor.push(order); if (order.join() == '') { bCheck = false; } }) // 开始生成表格 if (bCheck) { $('#createTable').html(''); var table = $('<table id="process" class="columnList"></table>'); table.appendTo($('#createTable')); var thead = $('<thead></thead>'); thead.appendTo(table); var trHead = $('<tr></tr>'); trHead.appendTo(thead); // 创建表头 var str = ''; $.each(arrayTile, function(index, item) { str += '<th width="100">' + item + '</th>'; }) str += '<th width="200">价格</th><th width="100">操作</th>'; trHead.append(str); var tbody = $('<tbody></tbody>'); tbody.appendTo(table); var zuheDate = step.doExchange(arrayInfor); if (zuheDate.length > 0) { //创建行 $.each(zuheDate, function(index, item) { var td_array = item.split(','); var tr = $('<tr></tr>'); tr.appendTo(tbody); var str = ''; $.each(td_array, function(i, values) { str += '<td>' + values + '</td>'; }); str += '<td ><input name="Txt_PriceSon" class="inpbox inpbox-mini" type="text"></td>'; str += '<td ><a href="#">删除</a></td>'; tr.append(str); }); } //结束创建Table表 arrayColumn.pop(); //删除数组中最后一项 //合并单元格 $(table).mergeCell({ // 目前只有cols这么一个配置项, 用数组表示列的索引,从0开始 cols: arrayColumn }); } else { //未全选中,清除表格 document.getElementById('createTable').innerHTML = ""; } }, hebingFunction: function() { $.fn.mergeCell = function(options) { return this.each(function() { var cols = options.cols; for (var i = cols.length - 1; cols[i] != undefined; i--) { mergeCell($(this), cols[i]); } dispose($(this)); }) }; function mergeCell($table, colIndex) { $table.data('col-content', ''); // 存放单元格内容 $table.data('col-rowspan', 1); // 存放计算的rowspan值 默认为1 $table.data('col-td', $()); // 存放发现的第一个与前一行比较结果不同td(jQuery封装过的), 默认一个"空"的jquery对象 $table.data('trNum', $('tbody tr', $table).length); // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用 // 进行"扫面"处理 关键是定位col-td, 和其对应的rowspan $('tbody tr', $table).each(function(index) { // td:eq中的colIndex即列索引 var $td = $('td:eq(' + colIndex + ')', this); // 获取单元格的当前内容 var currentContent = $td.html(); // 第一次时走次分支 if ($table.data('col-content') == '') { $table.data('col-content', currentContent); $table.data('col-td', $td); } else { // 上一行与当前行内容相同 if ($table.data('col-content') == currentContent) { // 上一行与当前行内容相同则col-rowspan累加, 保存新值 var rowspan = $table.data('col-rowspan') + 1; $table.data('col-rowspan', rowspan); // 值得注意的是 如果用了$td.remove()就会对其他列的处理造成影响 $td.hide(); // 最后一行的情况比较特殊一点 // 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan // 最后一行不会向下判断是否有不同的内容 if (++index == $table.data('trNum')) $table.data('col-td').attr('rowspan', $table.data('col-rowspan')); } // 上一行与当前行内容不同 else { // col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理 if ($table.data('col-rowspan') != 1) { $table.data('col-td').attr('rowspan', $table.data('col-rowspan')); } // 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan $table.data('col-td', $td); $table.data('col-content', $td.html()); $table.data('col-rowspan', 1); } } }) } // 同样是个private函数 清理内存之用 function dispose($table) { $table.removeData(); } }, doExchange: function(doubleArrays) { // 二维数组,最先两个数组组合成一个数组,与后边的数组组成新的数组,依次类推,知道二维数组变成以为数组,所有数据两两组合 var len = doubleArrays.length; if (len >= 2) { var arr1 = doubleArrays[0]; var arr2 = doubleArrays[1]; var len1 = arr1.length; var len2 = arr2.length; var newLen = len1 * len2; var temp = new Array(newLen); var index = 0; for (var i = 0; i < len1; i++) { for (var j = 0; j < len2; j++) { temp[index++] = arr1[i] + ',' + arr2[j]; } } var newArray = new Array(len - 1); newArray[0] = temp; if (len > 2) { var _count = 1; for (var i = 2; i < len; i++) { newArray[_count++] = doubleArrays[i]; } } return step.doExchange(newArray); } else { return doubleArrays[0]; } } } }) </script> </body> </html> ``` ``` ```
bootstraptable-edit使用问题
![图片说明](https://img-ask.csdn.net/upload/201908/06/1565077495_685813.png) 外部的表格无法获取数据,检查contentType属性配置问题。 ``` $(function() { //初始化Table var oTable = new TableInit(); oTable.Init(); }); var TableInit = function() { var oTableInit = new Object(); //初始化Table oTableInit.Init = function() { $('#table').bootstrapTable({ url : 'list',//请求后台的URL(*) method : 'post',//请求方式(*) toolbar : '#toolbar',//工具按钮用哪个容器 striped : true,//是否显示行间隔色 cache : false,//是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination : true,//是否显示分页(*) sortable : false,//是否启用排序 sortOrder : "asc",//排序方式 queryParams : oTableInit.queryParams,//传递参数(*) sidePagination : "server",//分页方式:client客户端分页,server服务端分页(*) pageNumber : 1,//初始化加载第一页,默认第一页 pageSize : 10,//每页的记录行数(*) pageList : [ 10, 25, 50, 100 ],//可供选择的每页的行数(*) search : true,//是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 contentType : "application/x-www-form-urlencoded", strictSearch : true, showColumns : true,//是否显示所有的列 showRefresh : true,//是否显示刷新按钮 minimumCountColumns : 2,//最少允许的列数 clickToSelect : true,//是否启用点击选中行 height : 700,//行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度 uniqueId : "id",//每一行的唯一标识,一般为主键列 showToggle : true,//是否显示详细视图和列表视图的切换按钮 cardView : false,//是否显示详细视图 detailView : false,//是否显示父子表 columns : [ { field : 'id', title : '编号' }, { field : 'name', title : '名字' }, { field : 'price', title : '价格' }, { field : 'operate', title : '操作', formatter : operateFormatter //自定义方法,添加操作按钮 }, ], rowStyle : function(row, index) { var classesArr = [ 'white', 'lightblue' ]; var strclass = ""; if (index % 2 === 0) {//偶数行 strclass = classesArr[0]; } else {//奇数行 strclass = classesArr[1]; } return { classes : strclass }; },//隔行变色 }); }; //得到查询的参数 oTableInit.queryParams = function(params) { var temp = {//这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的 limit : params.limit,//页面大小 //pageNumber: params.pageNumber,//页码 offset : params.offset }; return temp; }; return oTableInit; }; function operateFormatter(value, row, index) {//赋予的参数 return [ '<a href="#" style="color:blue;" οnclick="edit(' + row.id + ')">编辑</a>|', '<a href="#" style="color:red;" οnclick="del(' + row.id + ')">删除</a>', ].join(''); } ``` table-edit.js ``` (function($){ 'use strict'; $.extend($.fn.bootstrapTable.defaults, { editable: false }); var BootstrapTable = $.fn.bootstrapTable.Constructor, _init = BootstrapTable.prototype.init, _initBody = BootstrapTable.prototype.initBody, _onSort = BootstrapTable.prototype.onSort, _append = BootstrapTable.prototype.append, _initHeader = BootstrapTable.prototype.initHeader ; //添加编辑表格默认属性,如何edit设置为false时,表示该列不可编辑 $.extend(true,BootstrapTable.COLUMN_DEFAULTS,{ edit:{ type:'text'//目前只支持 文本:text 下拉:select 日期:date } }); BootstrapTable.prototype.init = function () { _init.apply(this, Array.prototype.slice.apply(arguments)); var that = this; that.prevEditRow = null;//上一次编辑的行 that.columns = {};//列配置信息 that.insertRowVal = {};//新插入行的默认值 that.enableAppend = true;//允许添加新行 if (that.options.editable) { var columnObj = this['getColumns'](); $.each(columnObj,function(i,obj){ $.each(obj,function(z,col){ if(!isNaN(col.fieldIndex) && col.fieldIndex >= 0){ if(col.checkbox)col.edit = false; that.columns['column'+col.fieldIndex] = col; that.insertRowVal[col.field] = ''; } }); }); //this.initEdit(); } }; /*BootstrapTable.prototype.initHeader = function(){ _initHeader.apply(this, Array.prototype.slice.apply(arguments)); this.$container.find('.fixed-table-header').addClass('success'); };*/ BootstrapTable.prototype.initBody = function () { var that = this; _initBody.apply(this, Array.prototype.slice.apply(arguments)); if (!that.options.editable) return; this.initEdit(); //如果列是下拉框,则转换值为对应的文本 $.each(that.columns,function(indx,col){ if(col.edit && col.edit.type == 'select'){ col.edit = $.extend({},$.fn.bootstrapSelect.defaults,col.edit); if(col.edit.data.length > 0){ that.$body.find('>tr').each(function(){ if(that.getData().length < 1)return true; var rowData = that.data[$(this).data('index')];//当前点击td所在行的数据 var $td = $(this).find('td').eq(col.fieldIndex); $.each(col.edit.data,function(i,data){ if(data[col.edit.valueField] == rowData[col.field]){ $td.html(data[col.edit.textField]); } }); }); } else if(col.edit.url){ $.ajax({ url:col.edit.url, type:'post', data:col.edit.paramsType == 'json' ? JSON.stringify(col.edit.params) : col.edit.params, dataType:'json', success: function(jsonLst) { col.edit.onLoadSuccess.call(this,jsonLst); that.$body.find('>tr').each(function(){ if(that.getData().length < 1)return true; var rowData = that.data[$(this).data('index')];//当前点击td所在行的数据 var $td = $(this).find('td').eq(col.fieldIndex); $.each(jsonLst,function(i,data){ if(data[col.edit.valueField] == rowData[col.field]){ $td.html(data[col.edit.textField]); } }); }); col.edit.data = jsonLst; col.edit.url = null; }, error: function(xhr, textStatus, errorThrown){ col.edit.onLoadError.call(this); col.edit.data = []; col.edit.url = null; throw col.field+' 列下拉框数据加载失败'; } }); } } }); }; //根据行号删除指定行 BootstrapTable.prototype.removeRow = function (rowNum) { var that = this; var len = that.options.data.length; if (isNaN(rowNum)){ return; } if(that.$body.find('.editable-select').data('index') != rowNum){ recover(that); } //删除数据 that.options.data.splice(rowNum,1); if (len === that.options.data.length){ return; } var oldClass = {};//保存被标记修改的样式 that.$body.find('>tr').each(function(indx){ if($(this).hasClass('editable-modify')){ if(indx > rowNum){ oldClass[indx-1] = 'editable-modify'; } else{ oldClass[indx] = 'editable-modify'; } } }); //this.prevEditRow = null; //this.$body.find('>tr').removeClass('editable-select'); that.initBody(); //将标记改变过行的样式从新设置回去 for(var key in oldClass){ that.$body.find('>tr').eq(key).addClass(oldClass[key]); } //this.initEdit(); //没有数据时给提示加上样式 if(that.getData().length < 1){ that.$body.find('>tr').addClass('no-records-found'); } }; BootstrapTable.prototype.append = function (){ var that = this; //if(!that.enableAppend)return; var oldClass = {};//保存被标记修改的样式 that.$body.find('>tr').each(function(indx){ if($(this).hasClass('editable-modify') || $(this).hasClass('editable-insert')){ oldClass[indx] = 'editable-modify'; } }); arguments[0] = $.extend({},that.insertRowVal,arguments[0]); _append.apply(this,Array.prototype.slice.apply(arguments)); if (that.options.editable){ //that.initEdit(); setTimeout(function (){ //将标记改变过行的样式从新设置回去 for(var key in oldClass){ that.$body.find('>tr').eq(key).addClass(oldClass[key]); } that.$body.find('>tr:last').addClass('editable-modify'); that.$body.find('>tr:last').addClass('editable-insert');//双重保险,防止在快速点击添加时,为给新增行设置editable-modify属性 that.$body.find('>tr:last').click(); },60); } }; BootstrapTable.prototype.onSort = function () { _onSort.apply(this, Array.prototype.slice.apply(arguments)); var that = this; if (that.options.editable) { this.initEdit(); } }; BootstrapTable.prototype.getData = function () { return (this.searchText || this.searchCallback) ? this.data : this.options.data; }; BootstrapTable.prototype.getColumns = function () { return this.options.columns; }; /** * 获取有被修改过行的值 */ BootstrapTable.prototype.getModiDatas = function (){ var that = this; var datas = []; that.$body.find('.editable-modify').each(function(){ if(that.data[$(this).data('index')]){ datas.push(that.data[$(this).data('index')]); } }); return datas; }; /** * 获取指定列的和,参数为列下标 */ BootstrapTable.prototype.getColTotal = function (num){ var retVal = 0; this.$body.find('>tr').each(function(){ var colNum = 0; if($(this).hasClass('editable-select')){ colNum = $(this).find('td').eq(num).find('input').val(); } else{ colNum = $(this).find('td').eq(num).html(); } if(!isNaN(colNum)){//是数字才做想加 retVal += Number(colNum); } }); return retVal; }; /** * 创建可编辑表格 */ BootstrapTable.prototype.initEdit = function(){ var that = this, data = this.getData(); //this.$body.find('> tr').unbind('click').on('click' //this.$body.delegate('>tr','click' this.$body.find('> tr').unbind('click').on('click',function(){ var $tr = $(this); if($tr.hasClass('editable-select') || data.length < 1 || $tr.hasClass('no-records-found')){ return; } $tr.removeClass('no-records-found'); recover(that); that.prevEditRow = $tr; $tr.addClass('editable-select');//给当前编辑行添加样式,目前样式为空只做标识使用 that.$body.find('> tr').not(this).removeClass('editable-select'); $tr.find('td').closest('td').siblings().html(function(i,html){ initTrClick(that,this); }); }); //鼠标点击事件 $(document).bind('mousedown',function(event){ var $target = $(event.target); if(!($target.parents().andSelf().is(that.$body)) && !($target.parents().andSelf().is($('.datetimepicker')))){ setTimeout(function () { recover(that); //that.prevEditRow = null; //that.$body.find('> tr').removeClass('editable-select'); },10); }; }); }; $.fn.bootstrapTable.methods.push('getColumns', 'getModiDatas','removeRow','getColTotal'); /** * 给tr添加点击事件 */ function initTrClick(that,_this){ that.enableAppend = true; var $td = $(_this); var $tr = $td.parent(); var rowData = that.data[$tr.data('index')];//当前点击td所在行的数据 var tdIndex = $tr.children().index($td);//当前点击的td下标 var tdOpt = that.columns['column'+tdIndex]; if(!tdOpt.edit || typeof tdOpt.edit != 'object'){ return ; } $td.data('field',tdOpt.field); if(!$td.data('oldVal')){ $td.data('oldVal',$.trim(rowData[tdOpt.field])); } var height = $td.innerHeight() - 3; var width = $td.innerWidth() - 2; $td.data('style',$td.attr('style'));//保存原来的样式 $td.attr('style','margin:0px;padding:1px!important;'); var placeholder = ''; if(tdOpt.edit.required == true){ placeholder = '必填项'; } var value = rowData[tdOpt.field] == null || rowData[tdOpt.field] == ''?'':rowData[tdOpt.field]; $td.html('<div style="margin:0;padding:0;overflow:hidden;border:solid 0px red;height:'+(height)+'px;width:'+(width)+'px;">' +'<input type="text" placeholder="'+placeholder+'" value="'+value+'" style="margin-left: 0px; margin-right: 0px; padding-top: 1px; padding-bottom: 1px; width:100%;height:100%">' +'</div>'); $td.width(width); var $input = $td.find('input'); if(!tdOpt.edit.type || tdOpt.edit.type == 'text'){ if(tdOpt.edit['click'] && typeof tdOpt.edit['click'] === 'function'){ $input.unbind('click').bind('click',function(event){ tdOpt.edit['click'].call(this,event); }); } if(tdOpt.edit['focus'] && typeof tdOpt.edit['focus'] === 'function'){ $input.unbind('focus').bind('focus',function(event){ tdOpt.edit['focus'].call(this,event); }); } $input.unbind('blur').on('blur',function(event){ if(tdOpt.edit['blur'] && typeof tdOpt.edit['blur'] === 'function'){ tdOpt.edit['blur'].call(this,event); } }); } else if(tdOpt.edit.type == 'select'){ $input.bootstrapSelect(tdOpt.edit); } else if(tdOpt.edit.type == 'date'){ $td.html('<div style="margin:0;padding:0;overflow:hidden;border:solid 0px red;height:'+(height)+'px;width:'+(width)+'px;" class="input-group date form_datetime" data-link-field="dtp_editable_input">' +'<input class="form-control" type="text" value="'+value+'">' +'<span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>' +'</div>' +'<input type="hidden" id="dtp_editable_input" value="'+value+'"/>' ); that.$body.find('.form_datetime').datetimepicker({ weekStart: 1, todayBtn: 1, autoclose: 1, todayHighlight: 1, startView: 2, forceParse: 0, language:'zh-CN', format: 'yyyy-mm-dd hh:ii:ss', pickerPosition: 'bottom-left', showMeridian: 1 }); } } /** * 恢复tr,使之处于不可编辑状态 */ function recover(that){ var isModi = false;//判断行值是否变动过 if(that.prevEditRow != null){ that.prevEditRow.find('td').closest('td').siblings().html(function(i,html){ $(this).attr('style',$(this).data('style')); var textVal = $(this).find('input[type="text"]').val(); var hiddenVal = $(this).find('input[type="hidden"]').val(); if(typeof $(this).find('input[type="text"]').bootstrapSelect('getText') != 'object'){ $(this).find('input[type="text"]').bootstrapSelect('destroy'); } if(textVal != undefined){ if($(this).data('oldVal') != (hiddenVal?hiddenVal:$.trim(textVal)) && $(this).data('field')) { that.data[that.prevEditRow.data('index')][$(this).data('field')] = hiddenVal?hiddenVal:$.trim(textVal); isModi = true; } if(that.columns['column'+i].edit.required == true){ if(textVal == null || textVal == ''){ that.enableAppend = false; return '<span style="color:red;">必填项不能为空</span>'; } } return $.trim(textVal); } }); //新值跟旧值不匹配证明被改过 if(isModi || that.prevEditRow.hasClass('editable-insert')){ that.prevEditRow.addClass('editable-modify'); } else{ that.prevEditRow.removeClass('editable-modify'); } that.prevEditRow = null; that.$body.find('> tr').removeClass('editable-select'); } } })(jQuery); ``` 哪位大神能帮忙解决下
js 用str+=拼接select标签 选中状态 替换jsp静态页面下拉菜单 无法展示选中状态
js部分代码 ``` /* 下半截部分组合表动态展示修改和添加 */ var arrESC = eval(json.listEarScanCp);// arrESC是一个数组频扫结论组合表 var str = ""; var str1 = ""; for (var i = 0; i < arrESC.length; i++) { // str += "<input type=\"hidden\" name=\"id2\" // id=\"id2\" value=\"" // + arrESC[i].id + "\"/>"; // str += "<input type=\"hidden\" name=\"id3\" // id=\"id3\" value=\"" // + arrESC[i].bianzhengId + "\"/>"; str += "<tr>"; str += "<td colspan=\"8\">"; str += "<div style=\"margin-left: 148px;\" id=\"earScanCp\">"; str += "<div style=\"float: left;\">"; str += "<textarea style=\"width: 50px;margin-left: -86px;position: absolute;\" id=\"cp_id\" name=\"cp_id\" >" + arrESC[i].id + "</textarea>"; str += "<select style=\"width: 60px;height: 36px;margin-left: 20px;\" id=\"gender\" name=\"gender\" >" var myselect = document.getElementById("gender");// 这个获取的是静态jsp页面里标签 // var index = myselect.selectedIndex; alert("myselect坐标0的值:" + myselect.options[0].value); /* * 下拉框主要是应展示项和所有下拉选项的值判断是否对应 分清主和客 所有展示项目为主表 * 客表的某一项值和遍历主表的值对应 这里面 下拉框所有选项值是主表 */ var str1 = ""; for (var j = 0; j < myselect.options.length; j++) {// 下拉框是主家从静态页面获取并且遍历它 alert("j值:" + myselect.options[j].value); // alert("arrESC[i].gender值:" + arrESC[i].gender); // alert("myselect.options[j].text值:" // + myselect.options[j].text); str += "<option value=\"" + myselect.options[j].value + "\">" + myselect.options[j].text + "</option>"; if (myselect.options[j].value == arrESC[i].gender) { // myselect.options[j].selected = true; // break; // arrESC[i].gender = "selected='selected'"; myselect.options[j].selected = 'selected'; } } // $("#gender").html(str1) // $("#gender").html(str); "</select>"; arrESC[i].gender = "selected='selected'"; str += "<textarea style=\"width: 50px;margin-left: 10px;\" id=\"min_age\" name=\"min_age\" >" + arrESC[i].min_age + "</textarea>"; str += "<textarea style=\"width: 50px;margin-left: 10px;\" id=\"max_age\" name=\"max_age\" >" + arrESC[i].max_age + "</textarea>"; str += "<textarea style=\"width: 300px;margin-left: 10px;\" id=\"xuewei_id\" name=\"xuewei_id\" >" + arrESC[i].xuewei_id + "</textarea>"; str += "<textarea style=\"width: 220px;margin-left: 10px;\" id=\"chuzhen_id\" name=\"chuzhen_id\" >" + arrESC[i].chuzhen_id + "</textarea>"; str += "<textarea style=\"width: 60px; height: 36px;margin-left: 10px;margin-top: 0px;\" id=\"bp\" name=\"bp\">" + arrESC[i].bp + "</textarea>"; str += "<textarea style=\"width: 50px; height: 36px;margin-left: 10px;margin-top: 0px;\" id=\"jielun_conform\" name=\"jielun_conform\">" + arrESC[i].jielun_conform + "</textarea>"; str += "</div>"; str += "<div >"; str += " <input type=\"button\" onclick=\"delRow(this," + arrESC[i].id + "," + arrESC[i].bianzhengId + ")\" value=\"删除\" id=\"deleteESC\" name=\"deleteESC\" style=\"float: left; margin-left:10px; margin-top: 5px;\">"; str += "</div>"; str += "</div>"; str += "</td>"; str += "</tr>"; $("#tbody1").html(str); } ``` jsp页面代码 ``` <div id="bottom"> <input type="button" onclick="addRow1()" value="添加项目" id="saveXiangmu" name="saveXiangmu" style="float: right; margin-right: 95px;"> <table border="0" cellpadding="2" cellspacing="1" style="width: 100%" id="rowTable1"> <thead> <th></th> <tr> <td colspan="8" style="line-height: 40px;"><label style="position: absolute;float: left; margin-left: 75px;">组合表ID</label> <label style="float: left; margin-left: 175px;">性别</label> <label style="float: left; margin-left: 35px;">最小年龄</label> <label style="float: left; margin-left: 20px;">最大年龄</label> <label style="float: left; margin-left: 170px;">阳性穴位</label> <label style="float: left; margin-left: 210px;">视触诊</label> <label style="float: left; margin-left: 116px;">血压</label> <label style="float: left; margin-left: 35px;">符合度</label></td> </tr> </thead> <!-- tbody里面是动态添加的内容 --> <tbody id="tbody1"> <tr> <td colspan="8"> <div style="margin-left: 148px;" id="earScanCp"> <div style="float: left;"> <textarea style="width: 50px; margin-left: -80px; position: absolute;"></textarea> <select style="width: 50px; height: 36px; margin-left: 4%;" id="gender"> <!-- position: absolute;--> <option value=0>男</option> <option value=1>女</option> <option value=2>通用</option> </select> <textarea style="width: 50px; margin-left: 2%;"></textarea> <textarea style="width: 50px; margin-left: 2%; /* margin-top: -2.5%; */"></textarea> <textarea style="width: 350px; margin-left: 2%; /* margin-top: -2.5%; */"></textarea> <textarea style="width: 250px; margin-left: 2%;/* margin-top: -2.5%; */"></textarea> <select style="width: 60px; height: 36px;margin-left: 102%;margin-top: -6%;"> <option value=0>正常</option> <option value=1>高血压</option> <option value=2>低血压</option> </select> <textarea style="width: 50px; margin-left: 112%;margin-top: -6%;">50</textarea> <!-- <input type="hidden" name="id2" id="id2" /> --> </div> </div> </td> </tr> </tbody> </table> </div> ``` 下拉框应该显示 通用选项 只有在调试过程中显示了通用 但是最终结果还是三个选项都显示了 ![图片说明](https://img-ask.csdn.net/upload/201807/18/1531885847_167042.png) ![调试过程可以显示选中状态](https://img-ask.csdn.net/upload/201807/18/1531885867_277218.png) 拼接的内容替换 jsp页面固定标签内容 选中状态消失了 ![选中状态消失](https://img-ask.csdn.net/upload/201807/18/1531885911_845477.png)
JPA中在OneToMany中引用子类时出现的问题--再贴一次
呵呵,在这里http://www.iteye.com/problems/6486已经有过讨论了,但soartju兄弟一句"很全面了"导致了无人跟贴,哈哈,只好再贴一次,顺谢jones和soartju两位兄弟. 问题:当Client采用OnToMany关联到Sub1时,如果被关联方(Sub1)是Super的子类(单表策略),就无法通过client.getSub1()方法获取到正确的结果(最终获得的结果相当于client.getSuper(),即将全部super对象返回了,而不是返回对应的sub1对象). 但:[quote][/quote]所有的sub1dao方法都返回了正确的结果. 例举如下: 1)超类: @Entity @Table(name="person") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING, length=50) public class Person {} 2)子类: @Entity @DiscriminatorValue(value="SellerLeader") public class SellerLeader extends Person { /** * 所属经销商 * @return 所属经销商 */ @ManyToOne @JoinColumn(name = "dealer_id", referencedColumnName = "id") public Seller getSeller() { return seller; } } 3)客户类: @Entity @Table(name="seller") public class Seller extends Dealer { /** * 上级经销商 * @return */ @ManyToMany @JoinTable(name="distributor_seller", joinColumns=@JoinColumn(name="seller_id", referencedColumnName="id"), inverseJoinColumns=@JoinColumn(name="distributor_id", referencedColumnName="id")) public Set<Distributor> getDistributors() { return distributors; } } 4)测试(由于是单表策略,person表共6条记录,其中SellerLeader有4条): Seller seller = sellerDao.get(-2L); Assert.assertEquals(4, seller.getLeaders().size());//注意:测试失败,告知说有6条而不是4条. Assert.assertEquals(4, sellerLeaderDao.getAll().size());//测试成功,说有4条. 5)另外,所有的sellerLeaderDao方法都是成功的,也就是说多态本身是没有问题的,就是在ontomany关系中使用多态出问题了. [b]问题补充:[/b] to jones: 呵呵,子类代码贴错了,更改如下: @Entity @Table(name="seller") public class Seller extends Dealer { private Set<SellerLeader> leaders; @OneToMany(cascade = CascadeType.ALL, mappedBy="seller") public Set<SellerLeader> getLeaders() { return leaders; } } [b]问题补充:[/b] 再晕,Seller是客户类,不是子类. [b]问题补充:[/b] Dealer @MappedSuperclass public abstract class Dealer { private String address; ....(没有相关内容) } [b]问题补充:[/b] 太感谢了! 就是它:@ForceDiscriminator.呵呵,居然不属于JPA规范.
网上下载的项目-导入ssm小米商城的后台项目访问登录界面login的时候无法跳转到其他页面是怎么回事?
在网上下载的ssm小米商城的后台项目 1:项目没有错误,,, 2:在访问登录界面login的时候- 却无法跳转到其他页面 3:数据库不知道是不是正常 4:我的数据库设置了管理员登录:admin 密码123456 5: 写了个generatorConfig.xml 6:::新增:看到有人回复说数据库的名字没有改: 我用的是mysql 数据库名是:shop 密码是:1234 userId我不知道是要赋值什么值,,一般不是userName吗??但是这个项目中的确实userId ,,所以我也给他 赋值了数据库的用户名 “root”但是这样配置根本就没有用,,同样无法跳转页面:::: 如果配置错了,,麻烦指出来,,非常感谢,,新手新手,,实力有限抱歉 求大神帮助,,,呜呜,,还是跳转不了 数据库图片: ![图片说明](https://img-ask.csdn.net/upload/201812/26/1545786449_770158.png) 数据库配置图: ![图片说明](https://img-ask.csdn.net/upload/201812/26/1545786860_325497.png) 按照网友提出的问题:修改数据库名和密码: 我把connectionURL 的 work_attendance也改成了shop,, 如下: //connectionURL="jdbc:mysql://localhost:3306/work_attendance" connectionURL="jdbc:mysql://localhost:3306/shop" <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/shop" userId="root" password="1234"> </jdbcConnection> 但是还是没有用,,,依然无法跳转,,总感觉没有错误,,,不知道错在哪了。。。。,,,,大神,,大神们求帮助中 代码如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" > <generatorConfiguration> <!--classPathEntry:数据库的JDBC驱动 --> <!-- location="D:\Develop\MvnRepo\mysql\mysql-connector-java\5.1.34\mysql-connector-java-5.1.34.jar"/> --> <classPathEntry location="D:\Users\lydia\workspaceSSH\shopCMS\src\main\webapp\WEB-INF\lib\mysql-connector-java-5.1.34.jar"/> <context id="MysqlTables" targetRuntime="MyBatis3"> <!-- 注意这里面的顺序确定的,不能随变更改 --> <!-- 自定义的分页插件 <plugin type="com.deppon.foss.module.helloworld.shared.PaginationPlugin"/> --> <!-- 可选的(0 or 1) --> <!-- 注释生成器 --> <commentGenerator> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- 必须的(1 required) --> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 connectionURL="jdbc:mysql://localhost:3306/work_attendance" --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/shop" userId="root" password="1234"> </jdbcConnection> ,, 登录界面 ![图片说明](https://img-ask.csdn.net/upload/201812/24/1545659180_616623.jpg) 每次一点击登录: console界面就显示: [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:845) DispatcherServlet with name 'SpringMVC' processing POST request for [/shopCMS/login/check] [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:297) Looking up handler method for path /login/check [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:302) Returning handler method [public java.lang.String com.shop.shopmanager.controller.LoginController.checkLogin(javax.servlet.http.HttpServletRequest) throws java.io.UnsupportedEncodingException,java.security.NoSuchAlgorithmException] [DEBUG][2018-12-24 21:47:08] org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:248) Returning cached instance of singleton bean 'loginController' [DEBUG][2018-12-24 21:47:08] org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:104) Creating a new SqlSession [DEBUG][2018-12-24 21:47:08] org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:140) SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7738ee46] was not registered for synchronization because synchronization is not active [DEBUG][2018-12-24 21:47:08] org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:110) Fetching JDBC Connection from DataSource [DEBUG][2018-12-24 21:47:08] org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:86) JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@41131e6d] will not be managed by Spring [DEBUG][2018-12-24 21:47:08] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:139) ==> Preparing: SELECT cu.user_id AS user_id4, login_name, login_password, salt, user_name, real_name, sex, age, pic_img, cu.`status` AS status4, email, telephone, cu.create_time AS create_time4, cu.update_time AS update_time4, cr.role_id AS role_id2, role_name, role_sign, is_system, cr.`status` AS status2, cr.create_time AS create_time2, cr.update_time AS update_time2, cr.remarks AS remarks2, cm.menu_id AS menu_id1, parent_id, menu_type, menu_code, menu_name, sort, href, icon, cm.`status` AS status1, permission, cm.create_time AS create_time1, cm.update_time AS update_time1, cm.remarks AS remarks1 FROM cms_menu cm, cms_role cr, cms_role_menu crm, cms_user cu, cms_user_role cur WHERE crm.role_id = cr.role_id AND crm.menu_id = cm.menu_id AND cur.user_id = cu.user_id AND cur.role_id = cr.role_id AND cu.login_name = ?; [DEBUG][2018-12-24 21:47:08] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:139) ==> Parameters: admin(String) [DEBUG][2018-12-24 21:47:08] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:139) <== Total: 73 [DEBUG][2018-12-24 21:47:08] org.mybatis.spring.SqlSessionUtils.closeSqlSession(SqlSessionUtils.java:168) Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7738ee46] [DEBUG][2018-12-24 21:47:08] org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:327) Returning JDBC Connection to DataSource [DEBUG][2018-12-24 21:47:08] org.apache.shiro.realm.AuthenticatingRealm.getAuthenticationInfo(AuthenticatingRealm.java:569) Looked up AuthenticationInfo [admin] from doGetAuthenticationInfo [DEBUG][2018-12-24 21:47:08] org.apache.shiro.realm.AuthenticatingRealm.cacheAuthenticationInfoIfPossible(AuthenticatingRealm.java:507) AuthenticationInfo caching is disabled for info [admin]. Submitted token: [org.apache.shiro.authc.UsernamePasswordToken - admin, rememberMe=false]. [DEBUG][2018-12-24 21:47:08] org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:104) Creating a new SqlSession [DEBUG][2018-12-24 21:47:08] org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:140) SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33b81d6e] was not registered for synchronization because synchronization is not active [DEBUG][2018-12-24 21:47:08] org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:110) Fetching JDBC Connection from DataSource [DEBUG][2018-12-24 21:47:08] org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:86) JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@41131e6d] will not be managed by Spring [DEBUG][2018-12-24 21:47:08] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:139) ==> Preparing: SELECT cu.user_id AS user_id4, login_name, login_password, salt, user_name, real_name, sex, age, pic_img, cu.`status` AS status4, email, telephone, cu.create_time AS create_time4, cu.update_time AS update_time4, cr.role_id AS role_id2, role_name, role_sign, is_system, cr.`status` AS status2, cr.create_time AS create_time2, cr.update_time AS update_time2, cr.remarks AS remarks2, cm.menu_id AS menu_id1, parent_id, menu_type, menu_code, menu_name, sort, href, icon, cm.`status` AS status1, permission, cm.create_time AS create_time1, cm.update_time AS update_time1, cm.remarks AS remarks1 FROM cms_menu cm, cms_role cr, cms_role_menu crm, cms_user cu, cms_user_role cur WHERE crm.role_id = cr.role_id AND crm.menu_id = cm.menu_id AND cur.user_id = cu.user_id AND cur.role_id = cr.role_id AND cu.login_name = ?; [DEBUG][2018-12-24 21:47:08] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:139) ==> Parameters: admin(String) [DEBUG][2018-12-24 21:47:08] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:139) <== Total: 73 [DEBUG][2018-12-24 21:47:08] org.mybatis.spring.SqlSessionUtils.closeSqlSession(SqlSessionUtils.java:168) Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33b81d6e] [DEBUG][2018-12-24 21:47:08] org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:327) Returning JDBC Connection to DataSource 原密码:123456Dts7jk 加密之后的密码为:lZQ/OoEBjTylEoEfxoyWeQ== [DEBUG][2018-12-24 21:47:08] org.apache.shiro.web.servlet.SimpleCookie.addCookieHeader(SimpleCookie.java:226) Added HttpServletResponse Cookie [rememberMe=deleteMe; Path=/shopCMS; Max-Age=0; Expires=Sun, 23-Dec-2018 13:47:08 GMT] [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdviceChain.invoke(ResponseBodyAdviceChain.java:61) Invoking ResponseBodyAdvice chain for body=login_fail [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdviceChain.invoke(ResponseBodyAdviceChain.java:83) After ResponseBodyAdvice chain body=login_fail [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:163) Written [login_fail] as "text/plain;charset=ISO-8859-1" using [org.springframework.http.converter.StringHttpMessageConverter@395cf6a4] [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1018) Null ModelAndView returned to DispatcherServlet with name 'SpringMVC': assuming HandlerAdapter completed request handling [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:996) Successfully completed request [DEBUG][2018-12-24 21:47:08] org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:248) Returning cached instance of singleton bean 'sqlSessionFactory' [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:845) DispatcherServlet with name 'SpringMVC' processing GET request for [/shopCMS/login] [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:297) Looking up handler method for path /login [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:302) Returning handler method [public java.lang.String com.shop.shopmanager.controller.LoginController.login()] [DEBUG][2018-12-24 21:47:08] org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:248) Returning cached instance of singleton bean 'loginController' [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:931) Last-Modified value for [/shopCMS/login] is: -1 [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225) Rendering view [org.springframework.web.servlet.view.JstlView: name 'login'; URL [/WEB-INF/views/login.jsp]] in DispatcherServlet with name 'SpringMVC' [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:166) Forwarding to resource [/WEB-INF/views/login.jsp] in InternalResourceView 'login' [DEBUG][2018-12-24 21:47:08] org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:996) Successfully completed request [DEBUG][2018-12-24 21:47:08] org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:248) Returning cached instance of singleton bean 'sqlSessionFactory' ``` ``` 我的数据库中有admin和密码 123456,,但是就是无法跳转到登录后的页面希望大佬能帮我看看是什么原因》》》 ------------------------------------ 后续添加,,,,麻烦大佬结合上述和下述看看是什么问题,,拜托拜托, 1:数据库用户表信息: ![图片说明](https://img-ask.csdn.net/upload/201812/28/1545962958_570862.png) 2:我的项目结构: ![图片说明](https://img-ask.csdn.net/upload/201812/28/1545962858_134226.png) 3:以下是登录控制器“LoginController”的代码: package com.shop.shopmanager.controller; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import javax.servlet.http.HttpServletRequest; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.shop.shopmanager.service.CmsUserService; /** * @Author 康健 * @Date 2017/8/14 14:54 */ @Controller @RequestMapping("login") public class LoginController { @Autowired private CmsUserService cmsUserService; /** * @Author JackWang [www.coder520.com] * @Date 2017/6/18 12:47 * @Description 登录页面 */ @RequestMapping public String login() { return "login"; } /** * @Author JackWang [www.coder520.com] * @Date 2017/6/18 12:47 * @Description 校验登录 */ @RequestMapping("/check") @ResponseBody public String checkLogin(HttpServletRequest request) throws UnsupportedEncodingException, NoSuchAlgorithmException { String username = request.getParameter("username"); String pwd = request.getParameter("password"); UsernamePasswordToken token = new UsernamePasswordToken(username, pwd); // token.setRememberMe(true); Subject subject = SecurityUtils.getSubject(); try { subject.login(token); SecurityUtils.getSubject().getSession().setTimeout(1800000); } catch (Exception e) { return "login_fail"; } return "login_succ"; } /* @RequestMapping("/register") @ResponseBody public String register(@RequestBody User user) throws UnsupportedEncodingException, NoSuchAlgorithmException { userService.createUser(user); return "succ"; }*/ } 4:UsernamePasswordToken 我没有这个类,这好像是一个方法-------网上好像说这是个认证机制,,不知道跳转不了跟这个有没有关系 网上解释:是最常见的用户名/密码的认证机制;同时,由于它实现了RememberMeAuthenticationToken接口,我们可以通过令牌设置“记住我”的功能。 但是,“已记住”和“已认证”是有区别的: 已记住的用户仅仅是非匿名用户,你可以通过subject.getPrincipals()获取用户信息。但是它并非是认证通过的用户,当你访问需要认证用户的功能时,你仍然需要重新提交认证信息。 这一区别可以参考淘宝网站,网站会默认记住登录的用户,再次访问网站时,对于非敏感的页面功能,页面上会显示记住的用户信息,但是当你访问网站账户信息时仍然需要再次进行登录认证。 5: 我的自定义数据库配置“jdbc.properties”: driverClassName=com.mysql.jdbc.Driver validationQuery=SELECT 1 jdbc_url=jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false jdbc_username=root jdbc_password=1234 6:"generatorConfig.xml" 这个就是上面的数据库驱动的配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" > <generatorConfiguration> <!--classPathEntry:数据库的JDBC驱动 --> <!-- location="D:\Develop\MvnRepo\mysql\mysql-connector-java\5.1.34\mysql-connector-java-5.1.34.jar"/> --> <classPathEntry location="D:\Users\lydia\workspaceSSH\shopCMS\src\main\webapp\WEB-INF\lib\mysql-connector-java-5.1.34.jar"/> <context id="MysqlTables" targetRuntime="MyBatis3"> <!-- 注意这里面的顺序确定的,不能随变更改 --> <!-- 自定义的分页插件 <plugin type="com.deppon.foss.module.helloworld.shared.PaginationPlugin"/> --> <!-- 可选的(0 or 1) --> <!-- 注释生成器 --> <commentGenerator> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- 必须的(1 required) --> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 connectionURL="jdbc:mysql://localhost:3306/work_attendance" --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/shop" userId="root" password="1234"> </jdbcConnection> <!-- 可选的(0 or 1) --> <!-- 类型转换器或者加类型解析器 --> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 必须的(1 required) --> <!-- java模型生成器 --> <!-- targetProject:自动生成代码的位置 --> <javaModelGenerator targetPackage="com.coder520.user.entity" targetProject="D:\Develop\IDEAWorkPlace\work-attendance\src\main\java" > <!--TODO enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="true"/> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 必须的(1 required) --> <!-- map xml 生成器 <sqlMapGenerator targetPackage="com.coder520.user.dao" targetProject="D:\Develop\IDEAWorkPlace\work-attendance\src\main\java"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> --> <sqlMapGenerator targetPackage="com.coder520.user.dao" targetProject="D:\Users\lydia\workspaceSSH\shopCMS\src\main\java"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 可选的(0 or 1) --> <!-- mapper 或者就是dao接口生成器 --> <javaClientGenerator targetPackage="com.coder520.user.dao" targetProject="D:\Users\lydia\workspaceSSH\shopCMS\src\main\java" type="XMLMAPPER"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 必须的(1...N) --> <!-- pojo 实体生成器 --> <!-- tableName:用于自动生成代码的数据库表;domainObjectName:对应于数据库表的javaBean类名 --> <!-- schema即为数据库名 可不写 --> <table tableName="role" domainObjectName="Role" enableInsert="true" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> <!-- 忽略字段 可选的(0 or 1) --> <!-- <ignoreColumn column="is_use" /> --> <!--//无论字段是什么类型,生成的类属性都是varchar。 可选的(0 or 1) 测试无效 --> <!-- <columnOverride column="city_code" jdbcType="VARCHAR" /> --> </table> <table tableName="permission" domainObjectName="Permission" enableInsert="true" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> <!-- 忽略字段 可选的(0 or 1) --> <!-- <ignoreColumn column="is_use" /> --> <!--//无论字段是什么类型,生成的类属性都是varchar。 可选的(0 or 1) 测试无效 --> <!-- <columnOverride column="city_code" jdbcType="VARCHAR" /> --> </table> </context> </generatorConfiguration> 万分感谢大佬,,,,,帮我解决这问题我就认你当师傅,,,大佬 ,,拜托了,,,还需要什么麻烦留下言哈
使用MvcPager的时候,点击查询会使js失效
初学mvc,在使用mvcpager分页的时候遇到一个棘手的问题,请教各位大神 一个后台管理页面view,左边是导航相关,右边设置有一个iframe用于显示不同导航链接 对应的view 1.主页面index ``` <div class="container-fluid"> <div class="row"> <!--RIP左侧固定导航栏--> <div class="col-md-2"> <!--管理列表(使用Prodect页布局)--> <div class="list-group RIP-Leftnav" id="RIP-LEFTNAV"> <a href="#" class="list-group-item active" id="/RIPManage/RIPDynamic"> <h4 class="list-group-item-heading">首页</h4> <p class="list-group-item-text">提供动态信息维护</p> </a> <a href="#" class="list-group-item" id="/RIPManage/RIPProduct"> <h4 class="list-group-item-heading">产品与服务</h4> <p class="list-group-item-text">静态信息维护请联系开发人员</p> </a> <a href="#" class="list-group-item" id="/RIPManage/RIPApplication"> <h4 class="list-group-item-heading">应用案例</h4> <p class="list-group-item-text">提供动态信息维护</p> </a> <a href="#" class="list-group-item " id="/RIPManage/RIPQuality"> <h4 class="list-group-item-heading">质量保证体系</h4> <p class="list-group-item-text">静态信息维护请联系开发人员</p> </a> <a href="#" class="list-group-item " id="/RIPManage/RIPResult"> <h4 class="list-group-item-heading">研发能力</h4> <p class="list-group-item-text">提供动态信息维护</p> </a> <a href="#" class="list-group-item " id="/RIPManage/RIPEnterprise"> <h4 class="list-group-item-heading">企业信息</h4> <p class="list-group-item-text">静态信息维护请联系开发人员</p> </a> </div> </div> <!--RIP右侧自动管理页--> <div class="col-md-10"> <!--信息管理--> <section> <div class="embed-responsive embed-responsive-4by3"> <iframe class="embed-responsive-item" id="RIP-iframe" scrolling="no" name="RIP-iframe" onload="this.height = RIP-iframe.document.body.scrollHeight" width="100%" frameborder="0"></iframe> </div> </section> </div> </div> </div> ``` 2.嵌入的子页面 ``` <div class="RIP-inside"> <div class="container"> <div class="page-header"> <h1>首页管理</h1> <p>提供对企业动态信息的维护管理,包括基本的文字、图片和附件管理</p> </div> <div class="RIP-Item-padding"> @*<input class="form-control input-sm" type="text" placeholder="查询内容">*@ <fieldset> <legend>查询</legend> <div class="RIP-CUDpadding"> <!-- Provides extra visual weight and identifies the primary action in a set of buttons --> @Html.ActionLink("新增", "RIPDynamicInsert", new { }, new { @class = "btn btn-primary" }) <!-- Indicates a successful or positive action --> <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#myModal" data-tempdata="" id="RIP-Delete"> 删除 </button> <!-- Modal --> <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <h4 class="modal-title" id="myModalLabel">删除确认</h4> </div> <div class="modal-body" id="Modal-DeleteContent"> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button> @*<button type="button" class="btn btn-primary" id="RIP-Delete-confirm">确认删除</button>*@ <a href="javascript:void(0)" id="RIP-Delete-confirm" class="btn btn-primary">确认删除</a> </div> </div> </div> </div> <!-- Contextual button for informational alert messages --> <button type="button" class="btn btn-info">修改</button> <p>@TempData["Condition"]</p> </div> @using (Ajax.BeginForm("RIPDynamic", new RouteValueDictionary { { "id", "" } }, new AjaxOptions { UpdateTargetId = "articles", InsertionMode = InsertionMode.Replace }, new RouteValueDictionary { { "id", "searchForm" } })) { <div class="row"> <div class="col-md-4"><span>文章标题:</span><input type="text" name="title" id="title" class="form-control" /></div> <div class="col-md-4"><span>上传人员:</span><input type="text" name="author" id="author" class="form-control" /></div> <div class="col-md-4"><span>附件名称:</span><input type="text" name="source" id="source" class="form-control" /></div> </div> <div class="RIP-CUDpadding"><button type="submit" class="btn btn-success">查询</button></div> } </fieldset> </div> <div id="articles"> @Html.Partial("_AjaxSearchPost", Model) </div> @section Scripts { @{Html.RegisterMvcPagerScriptResource();} } <script> $(function () { //1.Table点击效果,可以多选,第二次点击取消效果 $('#RIP-Table tr').click(function () { var id = $(this).attr('id'); var value = $('#box-' + id + '').prop('checked'); if (value === true) { $('#box-' + id + '').prop('checked', false); $(this).removeClass('RIP-Click'); } else { $('#box-' + id + '').prop('checked', true); $(this).addClass('RIP-Click'); } }); //2.获取1中选择好的记录关键信息 $('#RIP-Delete').click(function () { var idlist = ''; $('#RIP-Delete').removeData('data-tempdata'); $('#RIP-Table input').each(function () { if ($(this).prop('checked') === true) { var value = $(this).attr('id'); if (value != 'undefine') idlist += value; } }); //根据所选内容是否为空初始化模态框对应内容 if (idlist == '') { $('#Modal-DeleteContent').text('需要选择数据'); $('#RIP-Delete-confirm').attr('disabled', 'true'); } else { $('#RIP-Delete').data('data-tempdata', idlist); var content = $('#RIP-Delete').data('data-tempdata'); $('#Modal-DeleteContent').text(content); $('#RIP-Delete-confirm').removeAttr('disabled'); $('#RIP-Delete-confirm').attr('href', '/RIPManage/RIPDynamicDelete/did=' + content + ''); } }); //3.ajax触发删除 }); </script> </div> </div> </body> ``` 对应的分部页 ``` @using Webdiyer.WebControls.Mvc; @model PagedList<Model.ViewModels.RIPDefaultViewModel> <div style="float:left;width:50%;vertical-align:middle; padding-bottom:10px"><h4>当前页: @Model.CurrentPageIndex / @Model.TotalPageCount 页, 总共:@Model.TotalItemCount 条记录</h4></div> <div>@Html.Partial("_DefaultTable", Model)</div> <div class="text-center">@Html.Pager(Model, new PagerOptions { PageIndexParameterName = "id", ContainerTagName = "ul", CssClass = "pagination", CurrentPagerItemTemplate = "<li class=\"active\"><a href=\"#\">{0}</a></li>", DisabledPagerItemTemplate = "<li class=\"disabled\"><a>{0}</a></li>", PagerItemTemplate = "<li>{0}</li>", Id = "bootstrappager" })</div> ``` 对应的table页 ``` @model Webdiyer.WebControls.Mvc.PagedList<Model.ViewModels.RIPDefaultViewModel> <table class="table table-bordered table-hover table-striped table-responsive" id="RIP-Table"> <tr> <th> <input role="checkbox" type="checkbox" id="checkbox-fullselect" /> </th> <th class="nowrap"> <p> @Html.DisplayNameFor(model => model.SingleOrDefault().AutoID)</p> </th> <th class="nowrap"> <p> @Html.DisplayNameFor(model => model.SingleOrDefault().Title)</p> </th> <th class="nowrap"> <p> @Html.DisplayNameFor(model => model.SingleOrDefault().Content)</p> </th> <th class="nowrap"> <p> @Html.DisplayNameFor(model => model.SingleOrDefault().UploadPerson)</p> </th> <th class="nowrap"> <p> @Html.DisplayNameFor(model => model.SingleOrDefault().UploadTime)</p> </th> <th class="nowrap"> <p> @Html.DisplayNameFor(model => model.SingleOrDefault().FileName)</p> </th> <th class="nowrap"> <p> @Html.DisplayNameFor(model => model.SingleOrDefault().FileSize)</p> </th> </tr> @foreach (var item in Model) { <tr id="@Html.DisplayFor(modelitem=>item.AutoID)"> <td> <input role="checkbox" type="checkbox" id="box-@Html.DisplayFor(modelitem=>item.AutoID)" /> </td> <td class="nowrap"> <p> @Html.DisplayFor(modelitem => item.AutoID)</p> </td> <td class="nowrap"> <p> @Html.DisplayFor(modelitem => item.Title)</p> </td> <td class="nowrap"> <p> @Html.DisplayFor(modelitem => item.Content)</p> </td> <td class="nowrap"> <p> @Html.DisplayFor(modelitem => item.UploadPerson)</p> </td> <td class="nowrap"> <p> @Html.DisplayFor(modelitem => item.UploadTime)</p> </td> <td class="nowrap"> <p> @Html.DisplayFor(modelitem => item.FileName)</p> </td> <td class="nowrap"> <p> @Html.DisplayFor(modelitem => item.FileSize)</p> </td> </tr> } </table> ``` 后台 ``` public ActionResult Index(int id=1) { return View(); } //1.动态页管理 public ActionResult RIPDynamic(int id=1) { List<Model.UDynamic> dylist = BLL.LUDynamic.GetRecordList(); List<Model.UDynamicFile> dyfilelist = BLL.LUDynamicFile.GetRecordList(); //linq方法 var listmodel = (from dy in dylist join dyf in dyfilelist on dy.DynamicFileID equals dyf.AutoID into result from item in result.DefaultIfEmpty() select new RIPDefaultViewModel { AutoID = dy.AutoID, Title = dy.Title, Content = dy.Content, UploadPerson = dy.UploadPersonName, UploadTime = dy.UploadTime, FileName = item.FilesName, FileSize = item.FilesSize }).OrderByDescending(s=>s.AutoID).ToPagedList(id,5); if (Request.IsAjaxRequest()) return PartialView("_AjaxSearchPost", listmodel); return View(listmodel); } [HttpPost] public ActionResult RIPDynamic(string title,string author,string source,int id=1) { return RIPDynamicResult(title,author,source,id); } private ActionResult RIPDynamicResult(string title, string author, string source, int id = 1) { List<Model.UDynamic> dylist = BLL.LUDynamic.GetRecordList(); List<Model.UDynamicFile> dyfilelist = BLL.LUDynamicFile.GetRecordList(); //linq方法 var listmodel = (from dy in dylist join dyf in dyfilelist on dy.DynamicFileID equals dyf.AutoID into result from item in result.DefaultIfEmpty() select new RIPDefaultViewModel { AutoID = dy.AutoID, Title = dy.Title, Content = dy.Content, UploadPerson = dy.UploadPersonName, UploadTime = dy.UploadTime, FileName = item.FilesName, FileSize = item.FilesSize }).AsQueryable(); if (!string.IsNullOrWhiteSpace(title)) listmodel = listmodel.Where(s => s.Title.Contains(title)); if (!string.IsNullOrWhiteSpace(author)) listmodel = listmodel.Where(s => s.UploadPerson.Contains(author)); if (!string.IsNullOrWhiteSpace(source)) listmodel = listmodel.Where(s => s.FileName.Contains(source)); var querymodel = listmodel.OrderByDescending(s => s.AutoID).ToPagedList(id, 5); if(Request.IsAjaxRequest()) return PartialView("_AjaxSearchPost", querymodel); return View(querymodel); } ``` 因为初学,有很多写的不对的地方,但为什么点击查询后,iframe嵌套的页面的自己写的js都失效了呢 因为暂时没有c币了,还请见谅,能有效解决的话会补回来
刚学jsp,管理系统关于表单提交的问题
<p>我刚学jsp,现在在试着做一个设备管理系统,功能都实现了,但是现在想再扩充一下功能。<br>就是我有一个设备信息页面,是以表格形式在jsp页面显示出来的,然后我要点击修改信息,转到修改信息的页面,该页面是以表单提交的方式修改,在action中调用方法执行。但是现在有一个问题就是有些信息字段是有可能不需要修改的,我现在就是想<span style="font-size: small;">在修改页面的表单空格中显示待修改的数据,<span style="font-size: x-small;">这样的话就会比较方便,但是我不知道感怎样做。具体代码如下:</span></span></p> <p> </p> <p>这是设备信息表,在一个jsp页面显示。</p> <p>&lt;tbody&gt;<br>&lt;% <br><br>java.util.List&lt;E_BoardInformation&gt; E_BoardInformationList =(List)session.getAttribute("E_BoardInformationList");<br>  for(int i=0;i&lt;E_BoardInformationList.size();i++){<br>      E_BoardInformation ebi=E_BoardInformationList.get(i);<br>   <br>%&gt;<br>&lt;tr&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_id()%&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_model()%&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_96StepPartNum()  %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_PCB19StepPartNum() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_sort() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_amount() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_description() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_status() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_custodian() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_lender() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_lenddate() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_expectreturndate() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_returndate() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_lendhonor() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_remark1() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_remark2() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;%=ebi.getEquipment_board_remark3() %&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;a href="E_BoardIDAction.AdvantechEMS?id=&lt;%=ebi.getEquipment_board_id()%&gt;"&gt;删改&lt;/a&gt;<br>&lt;/tr&gt;<br>&lt;%}%&gt;</p> <p> </p> <p> </p> <p> </p> <p>点击“删改”之后,转到这个页面提交表单,到action调用方法执行。</p> <p> </p> <p>&lt;table width="300" height="100" border="3" bgcolor="red"&gt;<br>    &lt;caption&gt;更新设备信息&lt;/caption&gt;<br>    &lt;tr&gt;&lt;td&gt;&lt;label&gt;状        态 :&lt;/label&gt;&lt;input type="text" name="equipment_board_status" /&gt;  &lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;<br>    &lt;tr&gt;&lt;td&gt;&lt;label&gt;保   管   人 :&lt;/label&gt;&lt;input type="text" name="equipment_board_custodian"/&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;<br>    &lt;tr&gt;&lt;td&gt;&lt;label&gt;借   出   人 :&lt;/label&gt;&lt;input type="text" name="equipment_board_lender"/&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;<br>    &lt;tr&gt;&lt;td&gt;&lt;label&gt;借 出 时  间 :&lt;/label&gt;&lt;input type="text" name="equipment_board_lenddate"/&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;<br>    &lt;tr&gt;&lt;td&gt;&lt;label&gt;预计归还时间:&lt;/label&gt;&lt;input type="text" name="equipment_board_expectreturndate"/&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;<br>    &lt;tr&gt;&lt;td&gt;&lt;label&gt;归 还 时  间 :&lt;/label&gt;&lt;input type="text" name="equipment_board_returndate"/&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;<br>    &lt;tr&gt;&lt;td&gt;&lt;label&gt;诚   信   度 :&lt;/label&gt;&lt;input type="text" name="equipment_board_lendhonor"/&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;<br>    &lt;tr&gt;&lt;td&gt;&lt;label&gt;备        注 :&lt;/label&gt;&lt;input type="text" name="equipment_board_remark1"/&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;<br>    <br>     &lt;input type="submit" value="确定"/&gt;<br>     &lt;input type="reset" value="重新输入"/&gt;<br>     &lt;br&gt;</p> <p> </p> <p>我想在这个表单中显示上一个页面相应的信息,这样便于方便操作,有人告诉我说把值取进来,但是我不知道该怎样取。。。。</p> <p>各位,有劳了。。。。</p><br /><strong>问题补充:</strong><br />回答Rowen&nbsp; 这种办法我一开始就想过,但是,这样的话,就要在这个提交页面重新new一个List对象,如果有多条数据的话,这个显示能不能达到呢? <br /> <br /> <br />回答381573578,我现在是这样采取的,就是点击修改之后,转到一个action,把id传入Session中,然后转到修改的jsp页面提交表单,如果按照你的方式,我是不是也可以把该id对应的字段数据都保存在Session中,然后在jsp页面采取类似于上面一位朋友的方式new一个对象之后取出呢?<br /><strong>问题补充:</strong><br />To 381573578,嗯,机制明白了,但E_BoardInformationLis是指什么呢?以一个List对象来存放吗?${E_BoardInformationLis.字段名 }是什么呢?我真的没有这个基础,还望写详细一点,不胜感激,就在我的代码上面写一个简单的例子,多谢了。 <br /> <br />这是我获取id的action: <br /> <br />public String execute(HttpServletRequest request, HttpServletResponse response) <br /> { <br /> String id=request.getParameter("id"); <br /> request.getSession().setAttribute("currentID", id); <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "/sureBoard.jsp"; <br /> } <br /> <br />在sureBoard.jsp页面点击确定之后就会转到提交表单页面。 <br /> <br />另外,Rowen的方法我刚才试了,可以显示数据,但是有多少条数据就会有多少个表单,这与for循环有关,因为并没有说明id是哪一个。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
前后端分离,我怎么就选择了 Spring Boot + Vue 技术栈?
前两天又有小伙伴私信松哥,问题还是职业规划,Java 技术栈路线这种,实际上对于这一类问题我经常不太敢回答,每个人的情况都不太一样,而小伙伴也很少详细介绍自己的情况,大都是一两句话就把问题抛出来了,啥情况都不了解,就要指出一个方向,这实在是太难了。 因此今天我想从我学习 Spring Boot + Vue 这套技术栈的角度,来和大家聊一聊没有人指导,我是如何一步一步建立起自己的技术体系的。 线上大...
17张图带你解析红黑树的原理!保证你能看懂!
二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意结点的...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问