用ssm框架,maven开发的一些小总结

6 篇文章 0 订阅
4 篇文章 0 订阅
  • 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

除此方法外,也可以通过一些插件进行处理这种情况。以下是关于这个的一篇博客

http://www.cnblogs.com/gossip/p/6060840.html

当然更加推荐把配置文件放在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" })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值