- maven的资源文件,比如applicationContext.xml,*.properties等要放在resources的文件夹下面。如果不在此文件夹里面,则要在pom.xml文件里面用resources标签进行引入。因为默认情况下maven只打包src/main/resource下的资源文件,如以下
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/webapp</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
该标签的使用方法可以查看以下的官方说明文档
https://maven.apache.org/ref/3.5.3/maven-model/maven.html#class_resource
除此方法外,也可以通过一些插件进行处理这种情况。以下是关于这个的一篇博客
当然更加推荐把配置文件放在WEB-INF目录下面,如果放在resource文件夹下面,会出现其他错误,比如在springmvn-config.xml配置静态资源的访问映射时location会定义不到文件位置。
mybatis-config.xml文件在元素configuration的子元素settings,typeAliases等,顺序是由前后的,比如settings要放在typeAliases前面,不然会报错
通过jquery来获取一个复选表单有没有选中,发现无法获取,值总是为false,只有用js才能获取。
jquery的代码:
alert($("#login-form-check").checked);
js的代码:
alert(document.getElementById("login-form-check").checked);
spring MVC的控制器controller返回类型为String时,不能设置为另一个控制器
在用jackson和jquery的ajax与springMVC的controller进行交互时,代码如下
@RequestMapping("/jsp/getbook.action")
@ResponseBody
public Book getBook(@RequestBody Integer id) {
return bookService.findBookById(id);
}
发现无法解析json数据,会报以下错误
Can not deserialize instance of java.lang.Integer out of START_OBJECT token
后来发现jackson在交互时时不能使用整数直接传的,要用对象进行传递,改成如下就可以正常进行Ajax数据交互。
@RequestMapping("/jsp/getbook.action")
@ResponseBody
public Book getBook(@RequestBody Book book) {
return bookService.findBookById(book.getId());
}
这是前端的代码
function toUpdateBook(id) {
$("#updateBookId").text(id);
$.ajax({
url : "/jsp/getbook.action",
type : "post",
data : JSON.stringify({"id" : id}),
contentType : "application/json;charset=UTF-8",
dataType : "json",
success : function (data) {
if(data != null) {
console.log(data);
}
}
})
}
在持久层类中,如果使用的是mysql,要把boolean的类型改为int,因为mysql没有boolean值,是用整数类型来存储boolean值得,1为true,0为false。
controller的RequestMapping路径和某一网页要一一对应,不然会出现路径混乱问题,不同的RequestMapping路径指向相同的界面,导致无法唯一表示某一页面。不这样的话,RequestMapping的路径变成标识着某一业务逻辑。这是错误的开发模式。
将jsp中的request对象中存储的某一对象传递到javascript,可以用如下方法。
在jsp页面直接使用script标签,在此标签中是可以使用jsp的代码的。
<%
BookSearch bookSearch = (BookSearch) request.getAttribute("booksearch");
%>
<script>
$("#category-<%=bookSearch.getCategoryType()%>").addClass("active");
function getBookSearch() {
var obj = {
name : "<%=bookSearch.getName()%>",
categoryType : <%=bookSearch.getCategoryType()%>,
priceSort : "<%=bookSearch.getPriceSort()%>"
};
return obj;
}
</script>
这里要注意的是要在obj对象里面为返回值为String的加上双引号,不然会报错。
- 用jackson返回一个List集合的json数据时,会发生错误。错误如下:
Could not write content: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl and no properties discovered to create BeanSerializer
在网上查找相关错误后发现,是由于mybatis的延迟加载导致jackson无法传送集合的json数据,因为实体类中的一些属性没有及时被序列化,才出现这个bug
@RequestMapping("/jsp/getAllDeal.action")
@ResponseBody
public List<Deal> getAllDeal(@RequestBody User user) {
return dealService.findAllDealByUidWithBook(user.getId());
}
只要关闭mybatis的延迟加载,或者在实体类上加上下面的注解即可,该注解是忽略不能实例化的属性。
@JsonIgnoreProperties(value = { "handler" })