new->Maven Project,以maven-archetype-site方式建立作为父项目。
右键点击父项目->new->Maven Model 新建子项目,以maven-archetype-quickstart方式建立。
最后是web层,maven-archetype-webapp以方式建立。
在eclipse搭建父子项目时,maven update一直报错显示不能更新项目。
org/codehaus/plexus/archiver/jar/JarArchiver
说是连不上的问题。最后找到一个方法:打开mavend路径下/conf/setting.xml文件,ctrl+f 找到 mirrors 标签。在标签里添加以下信息:
alimaven
central
aliyun maven
http://maven.aliyun.com/nexus/content/repositories/central/
保存再次运行,没问题。
在实现查询角色的权限遇到问题。在测试文件RoleDaoTest里,查询结果的permissions结果一直为空。
IRoleDao文件
@Select("select * from role where id in (select roleId from users_role where userId=#{userId})")
@Results({
@Result(id = true, property = "id", column = "id"),
@Result(property = "roleName", column = "roleName"),
@Result(property = "roleDesc", column = "roleDesc"),
@Result(property = "permissions",column = "id",javaType = java.util.List.class,
many =@Many(select="com.itcast.ssm.dao.IPermissionDao.findPermissionByRoleId"))})
public List findRoleByUserId(String userId) throws Exception;
IPermissionDao
@Select("select * from permission where id in (select permissionId from role_permission where roleId=#{id})")
public List findPermissionByRoleId(String id) throws Exception;
把findPermissionByRoleId单独调用几次都不行。奇怪的是把sql语句放在PL/SQL Developer里测试能够执行且结果正确。逐一排查,发现把PL/SQL Developer的账号退出去,再进行测试发现有结果显示。难道同时在eclipse和PL/SQL Developer两个地方登录会冲突?
在运行时,爆红说找不到ContextListener。可以右键点击web层模块项目->propertise->Deployment Assembly 。查看有没有加载maven dependencies路径。
如果没有,点击add->选中Java Build Path Entries->选中maven dependencies,之后点击保存。
先清除服务器(右键服务器->clean),然后右键点击父项目run as->maven clean,接着按maven install,最后右键点击web子项目run as->run on service运行。
每次修改后,运行服务器爆红或者黑都可以先尝试上述方法清理运行。但是清理一次10s,重建一次25s,慎用。
发现他们在视频中,把这个文件整合放在web层上,实际开发中还是在Dao层建立一个applicationContext-dao.xml的分文件,在web层的.xml文件中以资源文件形式导入.xml分文件。
因为在模块测试时,读不到放在另一个子模块下的资源文件(也有可能是没有导入依赖的问题)。所以这样操作方便测试Dao模块。
最后就是securiy的坑,domian中SysLog文件time属性,按照之前Orders时,修改get方法。开启注释这三个属性在同一security:global-method-security 标签下。
如果傻傻地直接复制文档那段将属性单独分开三个标签,就会一直爆红说重复注册多行属性。其余都是关于反射的知识,这方面不熟练,之后要补课。
总结完毕。