杂记随笔

项目中遇到自己不懂的问题

配置相关

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">

HTML中Form表单的使用

上一篇:spring(5)——通过import标签整合多个beans


下一篇:Spring系列之Spring常用注解总结