项目中遇到自己不懂的问题
配置相关
idea配置maven
注意点:
配置环境变量 , 使用mvn -version命令查看是否成功配置
修改setting文件 , 设置依赖下载的本地仓库 , 设置国内下载阿里云镜像 , 注意修改本地仓库的时候要复制出来,不然会被注释掉
在IDEA中的setting / Maven 中
参考文档:关于IDEA配置maven环境
idea配置Git
安装教程:Git的安装与使用教程(超详细!!!)
IDEA配置及使用Git:idea配置git步骤
IDEA克隆项目: git / clone 进入页面 导入ssm项目需要配置Maven 和 tomcat
idea从首次从git上clone项目的步骤及配置运行项目
低级错误: 少写一个 } 引发的*
系统提示该位置不允许使用注解, 一开始以为是注解的问题 , 然后右边日志说 lombok失效,然后一堆操作之后还是不行
最后发现所有报错都是在这个类里面的 ,说明是这个类的什么地方出问题了 , 并且 ,看图中括号报错了, 参数也说找不到 , 所以推测是什么地方代码错了,
果然最后找到爆红的第一行 ,然后发现上一个方法的括号少写了一个 ,加上 } 不再爆红 , 推荐两个IDEA插件
idea彩虹括号插件
IDEA安装阿里代码规范插件
数据库连接错误引发的问题
早上到公司打开项目 , 运行时候报了下面的错误信息
ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'caseAutoPullService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.thinkgem.jeesite.modules.auto.utils.RequestAndHandleJsonService com.thinkgem.jeesite.modules.auto.service.CaseAutoPullService.requestAndHandleJsonService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestAndHandleJsonService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.thinkgem.jeesite.modules.accident.dao.CaseAccidentDao com.thinkgem.jeesite.modules.auto.utils.RequestAndHandleJsonService.caseAccidentDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.thinkgem.jeesite.modules.accident.dao.CaseAccidentDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.thinkgem.jeesite.modules.accident.dao.CaseAccidentDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
在网上看到很多解释
- 有配置文件错误
- 是否添加@Controller注解,检查对应的service是否添加了@Service(“xxxService”)注解’’
- 自己注入自己了
- web.xml文档的配置不对,
- bean配置的不正确或漏掉,
- JDBC错误
后来求助师傅 ,师傅看报错信息主要是Dao层与Server层报错 ,然后使用Git的查看历史修改工具, 发现代码没有问题 , 然后使用navcat测试数据库连接 ,发现连接没有问题,数据库正常连接 , 然后就用测试类测试数据库连接, 发现报错: 说明还是IDEA与数据库连接的问题
公司项目使用的mysql版本是mysql5.7 我一开始装的是mysql8.0 , 和公司的版本不一样 , 所以又装了一个mysql5.7 。 昨天也是报这个错,但是我没有想起来 ,打开服务,果然发现现在运行的是mysql8.0 。
关闭8.0 服务 ,打开 5.7的服务 ,再次运行 ,成功,无报错
navicat运行sql文件出现错误 , 报错文件过大 ,无法加载
解决方案:
找到MySQL安装地址的my.ini文件
添加上红色框中的一行
参考文件:Mysql的max_allowed_packet设定
jsp相关
有关jsp中 <form:select 标签的内容
form:select 遍历后台List集合 生成select下拉选择器
<div class="control-group">
<label class="control-label">事故认定原因分类:</label>
<div class="controls">
<%-- path: 实体中的字段 form:select 遍历后台List集合 生成select下拉选择器--%>
<form:select path="weatherType" class="input-xlarge required">
<form:option value="" label=""/>
<%-- items: 表示将要遍历的表 itemLabel: 显示的文本 itemValue: 文本的值 htmlEscape: 字符转义--%>
<form:options items="${fns:getDictList('weather_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
</form:select>
<span class="help-inline"><font color="red">*</font> </span>
</div>
</div>
path:表示实体类中的某个字段
items:表示将要遍历的表
itemLabel:表示显示的内容
itemValue:内容的值 , 比如代表的数字
${fns:getDictList()}:表示的是数据字典相关内容
htmlEscape=“false” ,起转义作用 , 输入内容 “<” ; 输出也能是 <
springmvc常用标签form:select
SpringMVC 表单标签中 htmlEscape 属性的作用
< c:forEach循环控制标签
<select id="caseUserInfoList{{idx}}_faultObject" name="caseUserInfoList[{{idx}}].faultObject" data-value="{{row.faultObject}}" class="input-small">
<option value=""></option>
<c:forEach items="${fns:getDictList('fault_object')}" var="dict">
<option value="${dict.value}">${dict.value} ${dict.label}</option>
</c:forEach>
</select>
option 元素定义下拉列表中的一个选项(一个条目)。
IDEA 开启 jsp 热部署
SSM项目热部署 , 在配置tomcat的时候 , 选择war exploded
war 和war exploded的区别
war模式:将WEB工程以包的形式上传到服务器 ;
war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;
点击旋转按钮 ,会弹出几个选项 , 选择resource 就可以
这样在修改 JSP 页面就不用重新启动tomcat
fns.tld 文件 ,<%@ taglib 引入
1、首先要有一个fns.tld 文件
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>JSTL 1.1 functions library</description>
<display-name>JSTL functions sys</display-name>
<tlib-version>1.1</tlib-version>
<short-name>fns</short-name>
<uri>http://java.sun.com/jsp/jstl/functionss</uri>
<function>
<description>获取字典对象列表</description>
<!-- jsp通过name属性找到这个方法-->
<name>getDictList</name>
<!-- 类的地址-->
<function-class>com.thinkgem.jeesite.modules.sys.utils.DictUtils</function-class>
<!-- 调用哪一个java方法-->
<function-signature>java.util.List getDictList(java.lang.String)</function-signature>
<!-- 在JSP中通过什么格式调用-->
<example>${fns:getDictList(type)}</example>
</function>
</taglib>
2、在jsp页面中引入 fns.tld 文件
<%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %>
3、在jsp中使用fns.tld文件中定义的方法 "value " 与 “label” 要和实体类中名字一样
<form:options items="${fns:getDictList('weather_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
4 、 后台java方法, 获取字典列表
public static List<Dict> getDictList(String type){
@SuppressWarnings("unchecked")
Map<String, List<Dict>> dictMap = (Map<String, List<Dict>>)CacheUtils.get(CACHE_DICT_MAP);
if (dictMap==null){
dictMap = Maps.newHashMap();
for (Dict dict : dictDao.findAllList(new Dict())){
List<Dict> dictList = dictMap.get(dict.getType());
if (dictList != null){
dictList.add(dict);
}else{
dictMap.put(dict.getType(), Lists.newArrayList(dict));
}
}
CacheUtils.put(CACHE_DICT_MAP, dictMap);
}
List<Dict> dictList = dictMap.get(type);
if (dictList == null){
dictList = Lists.newArrayList();
}
return dictList;
}
5、有一个字典的实体类 , jsp中j获取属性要和这里一样
public class Dict extends DataEntity<Dict> {
private static final long serialVersionUID = 1L;
private String value; // 数据值
private String label; // 标签名
private String type; // 类型
private String description;// 描述
private Integer sort; // 排序
private String parentId;//父Id
}
后端Java相关
StringUtils.isBlank(“abc”)与StringUtils.isEmpty("")
isBlank: 判断某字符串是否为空或者长度为0或由空白符(whitespace)构成
isEmpty : 判断某字符串是否为空,为空的标准是str == null或str.length() == 0
参考博客:isEmpty和isBlank的区别
model.addattribute()的作用
作用: 1.往前台传数据,可以传对象,可以传List,通过el表达式 ${}可以获取到,
<form:form id="inputForm" modelAttribute="caseAccident" action="${ctx}/accident/caseAccident/save" method="post" class="form-horizontal">