2018年5月工作中遇到的问题
1、客户报价管理:
客户名称显示逻辑,通过登陆用户ID在表upms_user_jskh查询到customer_ids和company_ids,然后通过查询的customer_ids和company_ids再去表crm_jskh里面查询客户名称。 |
2、修改用户管理:
1、用户管理页面:将新增用户按钮改成两个按钮分别为新增员工和新增客户,点击时跳出不同的页面。 2、在新增客户跳出的页面里添加:经营单位和结算单位下拉框 |
3、客户报价模板里面无法保存客户类型。
4、upms_user_jskh权限表,权限的商品库和报关模板字段在这个表里面。
5、报价模板存在表crm_quote_customer
6、5月7号下午---5月8号修改时,增加了非法字段导致报错,所以进行了修改
F:\IdeaProjects\wanli\zheng\zheng-crm\zheng-crm-web\src\main\java\com\zheng\crm\server\controller\ saleManage\CrmQuoteCustomerController.java F:\IdeaProjects\wanli\zheng\zheng-crm\zheng-crm-rpc-service\src\main\java\com\zheng\crmSaleManage\dao\mapper\ CrmQuoteTemplateMapper.xml
F:\IdeaProjects\wanli\zheng\zheng-upms\zheng-upms-server\src\main\java\com\zheng\upms\server\controller\manage\ UpmsUserRoleController.java F:\IdeaProjects\wanli\zheng\zheng-upms\zheng-upms-server\src\ main\webapp\WEB-INF\jsp\manage\userRole |
7、
client reconnect to 192.168.31.102:20883:没有连接 client(url: dubbo://192.168.31.102:20883/com.zheng.crm.rpc.api.CrmJskhContactsService:crm服务没有启动 |
8、在UpmsUserJskhMapper.xml文件里:
F:\IdeaProjects\wanli\zheng\zheng-upms\zheng-upms-rpc-service\src\main\java\com\zheng\upms\dao\mapper\UpmsUserJskhMapper.xml
<update id="updateData" parameterType="java.util.Map"> <if test="customer_text != null and ‘’!= customer_text "> //取消红色部分 <![CDATA[t.customer_text = #{customer_text},]]> </if> </update>
修改的问题: 用户管理,经营单位,结算单位、供应商、数据库、报关模板 批量勾选取消全部 保存后无效。 |
9、 使用select2实现多功能下拉框 **
下面是使用select2的初始化、动态赋值,实现标签化多选、以及遇到的问题: 1,从http://select2.github.io/examples.html 处下载select2源码,把dist目录中css、js引用到html中, 2,在页面中新建:<div id="test_select2"></div>, 3,初始化select2很简单,$('#test_select2').select2();就行,这是没有任何属性和值的最简单初始化,下面介绍几个常用的属性: var itemList =[{id:1,text:'测试1'}{}{}{{}{}{}{}]; //类似的json数组格式,可以单独用jquery的ajax获取服务器的数据。 $('#test_select2').select2({ placeholder : '输入话题关键字', tags : true, multiple : true, height: '40px', maximumSelectionLength : 3, allowClear : true, language: "zh-CN", data : itemList // itemList是[{}{}{}{}]格式的数组 }); |
10、 String 和List<String> 的互相转换 **
String 转换成List<String> : private List<String> stringToList(String strs){ String str[] = strs.split(","); return Arrays.asList(str); } List<String > 转换成 String : 迭代List的每个子项,将他们用“,”隔开,拼接最好是用StringBuilder 或者StringBuffer |
11、MyBatis框架:$和#的区别: ***
${param}传递的参数会被当成sql语句中的一部分,比如传递表名,字段名 例子:(传入值为id) order by ${param} 则解析成的sql为: order by id
#{parm}传入的数据都当成一个字符串,会对自动传入的数据加一个双引号 例子:(传入值为id) select * from table where name = #{param} 则解析成的sql为: select * from table where name = "id" 为了安全,能用#的地方就用#方式传参,这样可以有效的防止sql注入攻击 |
12、 maven项目中采用jetty插件启动每次修改代码都会自动重启的问题解决
<reload>默认值为 automatic,它与大于 0 的 scanIntervalSeconds 节点一起作用,实现自动热部署的工作。设为 manual 的好处是,当你改变文件内容并保存时,不会马上触发自动扫描和重部署的动作,你还可以继续的修改,直至你在 Console 或命令行中敲回车键(Enter)的时候才触发重新加载的动作。这样可以更加的方便调试修改。 |
13、 mybaits错误解决:There is no getter for property named 'id' in class 'java.lang.String'
在使用mybaitis传参数的时候,如果仅传入一个类型为String的参数,那么在 xml文件中应该使用_parameter来代替参数名。 |
14、为报价管理的供应商添加权限:
部分代码如下: Subject subject = SecurityUtils.getSubject(); Map<String,Object> userMap = new HashMap<>(); userMap.put("username",subject.getPrincipal()); userMap.put("usertype",100); List<Map<String,Object>> userList = upmsUserService.selectJskh(userMap); Map<String,Object> map = userList.get(0); String supplierStr =(String)map.get("supplier_ids"); List<Map<String,Object>> list = crmSupplierService.selectSupplierName(supplierStr); |
15、 MyBatis框架传参问题: ***
常用的两种方案:
第一种方案: DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{0} and user_area=#{1} </select> 其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。
第二种方案:如果只有一个参数可以不使用@param注解,否则必须要加,为了养成良好的习惯,建议都加 Dao层的函数方法 Public User selectUser(@param(“userName”)String name,@param(“userArea”)String area); 对应的Mapper.xml <select id=" selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{userName,jdbcType=VARCHAR} and user_area=#{userArea,jdbcType=VARCHAR} </select> 个人觉得这种方法比较好,能让开发者看到dao层方法就知道该传什么样的参数,比较直观,个人推荐用第二种方案。 |
16、下拉列表和单选按钮默认选中判断: ***
①、下拉列表默认选中: <select id="staffStauts" name="staffStauts" class="form-control"> <option value="0" <c:if test="${staff.staffStauts==0}">selected</c:if>>在职</option> <option value="1" <c:if test="${staff.staffStauts==1}">selected</c:if>>离职</option> </select> ②、单选按钮默认选中: <div class="radio radio-inline radio-success"> <input id="locked_0" type="radio" name="locked" value="0" <c:if test="${user.locked==0}">checked</c:if>> <label for="locked_0">正常 </label> </div> <div class="radio radio-inline"> <input id="locked_1" type="radio" name="locked" value="1" <c:if test="${user.locked==1}">checked</c:if>> <label for="locked_1">锁定 </label> </div> |
17、 JS和JSP的区别 *
1、JSP全名为Java Server Pages,其根本是一个简化的servlet设计,他实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。 jsp 要先翻译,注意是翻译成servlet才能执行:比如 test.jsp 要变成 test_jsp.java 然后编译成test_jsp.class 而 test_jsp.java 本身就是一个servlet。所以 jsp只是servlet的一个变种,方便书写html内容才出现的。servlet是根本,所有jsp能做的,servlet全能做。 2、简单地说——JS是在客户端执行的,需要浏览器支持Javascript。JSP是在服务器端执行的,需要服务器上部署支持Servlet的服务器程序。JS代码是能够直接从服务器上download得到,对外是可见的,jsp(和翻译后的servlet)代码是对外不可见的。 联系: JS与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。JSP在HTML中用<%%>里面实现。JS在html中用<Script></Script>实现 |
18、Invoke remote method timeout. method: selectUpmsUserByUsername:RPC服务链接超时
出现的原因:①、网络不好;②、就是指定的服务没有开启。
19、前台如何解析List<Map<String,Object>>数据:**
后台:
前台jQuery解析:
20、jQuery遍历函数:
21、 Java获取系统时间的四种方法
1、Date day=new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(df.format(day)); 通过Date类来获取当前时间
2、SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(df.format(System.currentTimeMillis())); 通过System类中的currentTimeMillis方法来获取当前时间
3、Calendar c = Calendar.getInstance();//可以对每个时间域单独修改 工厂模式 int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int date = c.get(Calendar.DATE); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); int second = c.get(Calendar.SECOND); System.out.println(year + "/" + month + "/" + date + " " +hour + ":" +minute + ":" + second); 通过Calendar类来获取当前时间
4、 Date date = new Date(); String year = String.format("%tY", date); String month = String.format("%tB", date); String day = String.format("%te", date); System.out.println("今天是:"+year+"-"+month+"-"+day); 通过Date类来获取当前时间 总结:设置时间格式可通过调用SimpleDateFormat类进行设置和通过String中的format方法来设置。可通过Date类和System中的currentTimeMillis来获取! |
22、ResultMap和ResultType在使用中的区别
1、resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。 2、 resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。 |
23、 mybatis异常:Could not find result map java.util.Map 问题分析及解决
错误写法 <select id="queryXXXCount" resultMap="java.util.Map" > 正确写法: <select id="queryXXXCount" resultType="java.util.Map">
注意: mybatis报出的异常日志栈信息定位不是那么准(找错误发生的地方不能直接根据异常栈信息直接定位到问题方法) 此次根据这次异常栈信息找到的就是正常的方法,但是触发了有问题的那个mybatis
在问题调试、查找过程中:根据svn提交信息将新提交的代码进行核对、注释掉,并进行实际调试才能准确定位此类问题。 |
24、JS获取当前时间戳的方法
JavaScript 获取当前时间戳: 第一种方法: var timestamp = Date.parse(new Date()); 结果:1280977330000 第二种方法: var timestamp = (new Date()).valueOf(); 结果:1280977330748 第三种方法: var timestamp=new Date().getTime(); 结果:1280977330748 第一种:获取的时间戳是把毫秒改成000显示, 第二种和第三种是获取了当前毫秒的时间戳。 |
25、用js将从后台得到的时间戳(毫秒数)转换为想要的日期格式
得到后台从数据库中拿到的数据我们希望格式是 2016年10月25日 17时37分30秒 或者 2016/10/25 17:37:30 然而我们前台得到的却是一段数字(时间戳,毫秒数) 1477386005 我们要将时间戳转化为我们想要的格式。 核心方法 : 1477386005是我从后台得到时间戳 (注意:有的时候得到的时间戳是已经乘以1000的) var unixTimestamp = new Date( 1477386005*1000 ) ; commonTime = unixTimestamp.toLocaleString(); alert(commonTime); 这时候的结果是: 但是我希望转换为我自己想要的格式,就在本页面重写一下 toLocaleString()方法即可。 Date.prototype.toLocaleString = function() { return this.getFullYear() + "年" + (this.getMonth() + 1) + "月" + this.getDate() + "日 " + this.getHours() + "点" + this.getMinutes() + "分" + this.getSeconds() + "秒"; }; 结果为: 或者其他想要的格式:
Date.prototype.toLocaleString = function() { return this.getFullYear() + "/" + (this.getMonth() + 1) + "/" + this.getDate() + "/ " + this.getHours() + ":" + this.getMinutes() + ":" + this.getSeconds(); }; 结果为: |
26、错误问题:
解决方法:重新安装服务
27、 Unknown return value type: java.lang.Integer
原因之一: 没有写@responseBody注解
28、如何在服务器端的程序中判断时间是否是新的一天。
思想:在数据库里专门建一个表存放时间,在使用过程中获取当前系统时间后去数据库里查询是否有这个时间,有则不是新一天。没有查到则是新一天,并把这一天存到数据库中。
29、项目中逻辑编写:
要记住:在Controller层是能写一些简单的逻辑代码,主要的逻辑代码需要一定要在Service里面写。这样才符合SSM框架SVM模式的设计理念,同时在Service层里面有事务可以保证访问数据库的安全性。
文章来源: blog.csdn.net,作者:轻狂书生FS,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/LookForDream_/article/details/86634290
- 点赞
- 收藏
- 关注作者
评论(0)