开发中遇到问题

时间:2019-08-27
本文章向大家介绍开发中遇到问题,主要包括开发中遇到问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.跨域问题
springboot 配置类加上
/**
* 跨域支持
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600 * 24);

/*xhrFields:{
withCredentials:true
},*/
}
<!-- ========================================================================= -->
2.跨域前后端调试的时候,用户登录之后,获取不到用户,但是本机还是很正常。
用户是存储在session中的,跨域请求导致sessionId不一致导致的。
ajax加上
xhrFields:{
withCredentials:true
},
<!-- ======================================================================== -->
3.用户未推出,切换其他用户登录获取菜单信息仍是上一用户信息。
用户正常登出的时候,会调用session.invalidate()方法,去销毁session,但是用户没有正常登录,
session session中仍然会保留上一用户的信息 。
登录时先调用session的getAttributeNames方法,清空上一用户保存在session中的信息。
Enumeration<String> attributeNames = session.getAttributeNames();
while (attributeNames.hasMoreElements()) {
String valueName = attributeNames.nextElement();
session.setAttribute(valueName, null);
}
<!-- =================================================================== -->
4.Hql参数占位符使用

使用springdatajpa或者hibernate创建的query下角标赋值的问题,

用EntityManager创建springdatajpa的原生sql语句参数占位正常使用数字占位就可以了,
但是使用hibernate的session创建出的query,需要用字符串进行占位。
JPA(java persistens api)的方式


// 有问题的jpa方式
Query query = sessionFactory.openSession().createQuery("from User u where u.name =?0")
query.setParamter(0,"line"); //?后面的数字是可以随意的,不必要从0开始
上面的方式会得到一个异常信息:

  threw exception [Request processing failed; nested exception is org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 2] with root cause
  org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 2 

这是由于Query是有hibernate封装好的session中获取的,所以我们不能按照jpa的方式来写:

// 调用的是setParmter(string,string)的方法,而不是setParmter(int,string)
Query query = sessionFactory.openSession().createQuery("from User u where u.name =?0")
query.setParamter("0","line"); //?后面的数字是可以随意的,不必要从0开


在Hibernate 4版本中,对于Hql有一点点改变,如果你还是按照以前的方式去编写HQL Query query = sessionFactory.openSession().createQuery("from User u where u.name = ?") .setParamter(0,"line");就会得到一个警告。

得到的警告:
  [DEPRECATION] Encountered positional parameter near line 1, column 95. Positional parameter are considered deprecated; use named parameters or JPA-style positional parameters instead.

//按上面提示的意思,它不提倡我们用这样的方式适用占位符,而是建议用JPA或者命名参数的占位符:

1: 命名参数的方式

Query query = sessionFactory.openSession().createQuery("from User u where u.name =:name");
query.setParamter("name","line");


<!-- ============================================ -->
5.Division undefined 用bigdicimal做报表的时候,正常除0是by zero ,这个是一个0除0的异常。


6.做用户登录记住密码的时候,没有虽然制定了cookie的最大时间,但没有指定cookie的位置,也没有生效。


7.用poi最导出的时候,导出数据量太大导出报错,后来查了一下,excel的版本对每一个sheet最大行数是有限制的,后来就是
到最大行新建一个sheet。

8.用poi做导入的时候,因为用户需求不太一样,有希望导入一批数据,导入多少算多,有希望一批导入


<!-- itext -->
用itext给浏览器返回repose时候,itext有几个表单域的内容总是无法填充,一开始以为是浏览器问题,后来用了几个浏览器,发现不是浏览器问题,后来想了想,可能是字体的问题,后来设置了中文字体就可以了。

原文地址:https://www.cnblogs.com/lpp-xjj/p/11417510.html