2018年5月工作中遇到的问题

2018年5月工作中遇到的问题

1客户报价管理:

 

客户名称显示逻辑,通过登陆用户ID在表upms_user_jskh查询到customer_ids和company_ids,然后通过查询的customer_ids和company_ids再去表crm_jskh里面查询客户名称。

2、修改用户管理:

 

1、用户管理页面:将新增用户按钮改成两个按钮分别为新增员工和新增客户,点击时跳出不同的页面。

2、在新增客户跳出的页面里添加:经营单位和结算单位下拉框

3、客户报价模板里面无法保存客户类型。

4upms_user_jskh权限表,权限的商品库和报关模板字段在这个表里面。

5、报价模板存在表crm_quote_customer

657号下午---58号修改时,增加了非法字段导致报错,所以进行了修改

 

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服务没有启动

 

8UpmsUserJskhMapper.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

 

 

11MyBatis框架:$#的区别:                          ***

 

${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 = #{userNamejdbcType=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 JSJSP的区别     *

 

1JSP全名为Java Server Pages,其根本是一个简化的servlet设计,他实现了Html语法中的java扩张(以 <%, %>形式)。JSPServlet一样,是在服务器端执行的。

       jsp 要先翻译,注意是翻译成servlet才能执行:比如 test.jsp 要变成 test_jsp.java 然后编译成test_jsp.class

test_jsp.java 本身就是一个servlet。所以 jsp只是servlet的一个变种,方便书写html内容才出现的。servlet是根本,所有jsp能做的,servlet全能做。

2简单地说——JS是在客户端执行的,需要浏览器支持JavascriptJSP是在服务器端执行的,需要服务器上部署支持Servlet的服务器程序。JS代码是能够直接从服务器上download得到,对外是可见的,jsp(和翻译后的servlet)代码是对外不可见的。

联系:

JSJavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。JSPHTML中用<%%>里面实现。JShtml中用<Script></Script>实现

18Invoke remote method timeout. method: selectUpmsUserByUsernameRPC服务链接超时

     出现的原因:、网络不好;、就是指定的服务没有开启。


19、前台如何解析List<Map<String,Object>>数据:**

后台:

6e7c6c5a5b61a03f8f2191fff9200a46a77.jpg

前台jQuery解析:

04e2af640edee17c85d7e38158d1d5f63af.jpg

20jQuery遍历函数:

fa04bdb52a2a160477b03f88620f73fb70c.jpg

21 Java获取系统时间的四种方法

 

 1Date day=new Date();    

      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      System.out.println(df.format(day));   

      通过Date类来获取当前时间    

 

2SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");         

      System.out.println(df.format(System.currentTimeMillis()));   

       通过System类中的currentTimeMillis方法来获取当前时间 

 

3Calendar 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来获取!

22ResultMapResultType在使用中的区别

 

1resultType:当使用resultTypeSQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。

2 resultMap:当使用resultMapSQL语句返回结果类型处理时,通常需要在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提交信息将新提交的代码进行核对、注释掉,并进行实际调试才能准确定位此类问题。

 

24JS获取当前时间戳的方法

 

JavaScript 获取当前时间戳:

第一种方法:

var timestamp = Date.parse(new Date());

结果:1280977330000

第二种方法:

var timestamp = (new Date()).valueOf();

结果:1280977330748

第三种方法:

var timestamp=new Date().getTime();

结果:1280977330748

第一种:获取的时间戳是把毫秒改成000显示,

第二种和第三种是获取了当前毫秒的时间戳。

 

25js将从后台得到的时间戳(毫秒数)转换为想要的日期格式

 

得到后台从数据库中拿到的数据我们希望格式是  

 20161025 173730秒 或者 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、错误问题:

3e2e0f32f9036ba3a278e9c18c8fbf94030.jpg

解决方法:重新安装服务

27 Unknown return value type: java.lang.Integer

原因之一: 没有写@responseBody注解

28、如何在服务器端的程序中判断时间是否是新的一天。

    思想:在数据库里专门建一个表存放时间,在使用过程中获取当前系统时间后去数据库里查询是否有这个时间,有则不是新一天。没有查到则是新一天,并把这一天存到数据库中。

29、项目中逻辑编写:

要记住:在Controller层是能写一些简单的逻辑代码,主要的逻辑代码需要一定要在Service里面写。这样才符合SSM框架SVM模式的设计理念,同时在Service层里面有事务可以保证访问数据库的安全性。

 

转载于:https://my.oschina.net/u/3421512/blog/3081011

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值