开发中遇到问题
Posted lpp-xjj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发中遇到问题相关的知识,希望对你有一定的参考价值。
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有几个表单域的内容总是无法填充,一开始以为是浏览器问题,后来用了几个浏览器,发现不是浏览器问题,后来想了想,可能是字体的问题,后来设置了中文字体就可以了。
以上是关于开发中遇到问题的主要内容,如果未能解决你的问题,请参考以下文章