传智播客学习.docx
- 文档编号:11766119
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:20
- 大小:143.57KB
传智播客学习.docx
《传智播客学习.docx》由会员分享,可在线阅读,更多相关《传智播客学习.docx(20页珍藏版)》请在冰点文库上搜索。
传智播客学习
1.“Thecontentofelementtype"package"mustmatch"(result-types?
interceptors?
default-interceptor-ref?
default-action-ref?
default-class-ref?
global-results?
global-exception-mappings?
action*)".”
刚看到这个错误我就想,哪个也没写错呀。
仔细对了好几遍也没发现哪个属
性写错了。
最后Google了一下,看了别人写的文章豁然开朗了。
这个错误的意思是,package里元素必须按照一定的顺序排列。
这个顺序
就是
result-types
interceptors
default-interceptor-ref
default-action-ref
default-class-ref
global-results
global-exception-mappings
action*(就是所有的action放到最后)主键约定都用long
2.搭建环境
3.Hibernate中的jpa是避免类找不到异常的出现
4.commons-codec,commons-lang跟编码相关,stringutils是专门操作字符串的,digestUtil专门操作数字DigestUtils.md5Hex("123");
5.jar包冲突表现在高低版本上
6.opentype对话框找方言ctrl+shift+T
7.preference中xmlcatalog中配置XSD文件形成备用库,之后在xml文件当中选择自己所需的帮助xsd(xsd是约束文件)
8.
9.Struts2可以配置的属性都在
default中
10.提示功能的设置
11.Log4j的作用
12.@Transactional
publicvoidsave(){
}
自动在方法是用之前打开事务,方法执行完提交事务,出现异常回滚事务
如果在类上面加@Transactional,则其中的每一个方法都启用事务
13publicinterfaceRoleDao
类或接口继承泛型,其名称后面一定也要加泛型
第二天
1.实体设计
1.1有几个实体
1.2实体之间有无关系,有什么关系
1.3每个实体有什么属性(代理主键即是自然主键)
1.3.1主键、关联关系属性(连接它的线有几个端就有几个关联关系属性、一般属性(从列表或表单显示出来的,要看所有表单属性),特殊属性(为解决某问题而设计的,如显示的是年龄,实际是生日,通过计算的出来)
Users:
set
2.分析并完成一组功能
3.测试
实体设计过程
--users属性,我与User的多对多-->
4.
--roles属性,我与Role的多对多-->
5.
--parent属性,我与Department(上级)的多对一-->
--children属性,我与Department(下级)的一对多-->
6.
7.
--lastTopic属性,我与Topic的一对一
8.基于外键的一对一的映射
9.-->
10.
11.映射过程:
写注释。
拷模板。
填空。
外键要保持两边一致
分析功能:
先从最基础的实体开始
以下两个实现action跳转的方法是一样的
返回泛型参数所代表的类型
ParameterizedTypept=(ParameterizedType)this.getClass().getGenericSuperclass();
this.clazz=(Class)pt.getActualTypeArguments()[0];
id=${id}"onclick="returnconfirm('您确定要删除这个岗位吗')">删除 aaction="RoleAction_delete? id=%{id}"onclick="returnconfirm('您确定要删除这个岗位吗')">删除 a> Struts标签的超链接不用加uri的根路径,只需要namespace/action Html的超链接需要 struts2标签不显示Label的解决方法 struts2的标签不管是 textfield>还是 password>一概不显示label了,连换行都不换了。 查找原因有三种情况: 1、发现原来struts.properties下多了这句话: struts.ui.theme=simple 2、struts2.xml中有 3、jsp页面form标签有属性theme="simple"如果想不显示Label值就加上 <%=basePath%>http: //localhost: 8080/OA2/ aaction="RoleAction_addUi.action">添加 a>action就只写action,自动添加这个action之前的路径 比如http: //localhost: 8080/OA2/S/RoleAction_list.action 然后我访问"RoleAction_addUi.action,它就会自动加上http: //localhost: 8080/OA2/S/ 普通的form表单的action必须指定项目名称,而struts的表单则自动加上了根路径+项目名 Action找的就是actionhref找的是链接 ahref="editUi.jsp">huidao a>自动在前面加上 <%=basePath%>http: //localhost: 8080/OA2/ Packagetutorialextendsundefinedpackagestruts-default ActionContext.getContext().getValueStack().push(role);将对象压入栈顶 Prepareable方法是在返回model之前提前准备一下 拦截器使得能够在prepareable中得到参数值,负责执行准备的方法 Struts操作的数据都是值栈中的数据,如果值栈中没有某个数据,它就不能使用它,若是想使用它,必须将它压入栈中 拦截器配置 method="{1}"> 在模型被调用之前,这个模型中的值都是为空的 开发模式可以使程序自动加载 抽象类实现某个接口,可以选择性的复写或实现其中的方法 删除关联关系的记录 级联 HQL语句对于表名大小写敏感,其他不敏感 懒加载: 在第一个session用完取得结果后,session被关闭了,如果其他的再使用这个结果就会出现懒加载 Opensessionviewfilter是一个session延迟器,可以延迟session在将页面显示完之后再关闭 一定要配置在struts的过滤器之前 selectlist="departmentList"listkey="传递的值对应的属性"listValue="要显示的值对应的属性"headerKey=""headerValue="---请选择部门名称---" value="parent.id(默认要选择的值)"> select> 添加更新 在prepare方法中不能使用department.getId();在action中可以使用 1.转到添加页面之前默认选中之前查看上级部门 selectname="parentId"cssClass="SelectStyle" list="departmentList"listKey="id"listValue="name" headerKey=""headerValue="--请选择部门--" 2.value="parentId"> 删除、修改、添加之后要转到上一次访问的页面,而不是顶级页面 parentId=${parentId} 在自定义标签的属性值里面用%在其他地方用$ 3点击上级部门名称,可以显示上级部门列表 s: aaction="DepartmentAction_list? parentId=%{parent.parent.id}">${parent.name} a> 自关联结构用递归 打印一棵树就是打印它的顶点和子树,子树也是一棵树 @Test publicvoidprintAllDepts_1(){ List //方式一 //for(Departmenttop: topList){ //printDepartmentTree(top); //} //方式二 printDepartmentTreeList(topList,"┣”); } //方式一: 显示以top为顶点的部门树信息(所有节点的名称) privatevoidprintDepartmentTree(Departmenttop){ //一个顶点 System.out.println(top.getName()); //n个子树 for(Departmentchild: top.getChildren()){ printDepartmentTree(child); } } //方式二: 显示一堆树的信息 //参数是一堆树的顶点 privatevoidprintDepartmentTreeList(Collection for(Departmenttop: topList){ //一个顶点 System.out.println(prefix+top.getName()); //n个子树 printDepartmentTreeList(top.getChildren(),""+prefix); } } 抽象类可以继承一个类,也可以实现接口,并且不用覆写接口中的方法 radioname="gender"list="#{'男': '男','女': '女'}"> radio> 如果不写listkey与listvalue使用ognl表达式表示listkey与listvalue selectname="roleIds"cssClass="SelectStyle" multiple="true"size="10"默认显示几行 list="roleList"listKey="id"listValue="name" > select> Action当中的参数用%{} 如果表单中提供的不是model的所有属性,则要在preparedite方法中准备model List—prepareEditUi—saveUilist当中有的就给model赋值,如果没有的就null 这就是一个过去和一个回来的过程 验证是对所有的action方法进行验证服务器端验证implementsValidatabl @Override publicvoidvalidateEdit(){ //TODOAuto-generatedmethodstub addFieldError(fieldName,errorMessage); super.validate(); } 客户端验证jQuery。 Validate 初始化权限 权限管理 1.一个功能就对应一个url 2.两个功能就对应两个url 控制功能,就是控制url 1.每个用户都应该有一个功能集合 2.如果某个用户的功能在这个集合中,则这个用户就拥有对这个功能的操作权限 3.user属于哪个role就拥有哪个功能,功能都在role中 1.登陆注销2 2.左侧只显示具有权限的内容 3.右侧只显示有权限的功能链接 4.如果没有权限,即使在地址栏中直接输入链接也不能(对每一个请求都进行权限验证(过滤器或拦截器)) 1.如果未登录,没有权限,则转到登陆页面 2.如果已登录,没有权限,则转到错误页面 自关联 privatePrivilegeparent;与父亲多对一 privateSet 非自关联 privateSet 写关联关系的映射文件的步骤 1.写注释2.写模板3.填空只要是对多就用set 2. --privileges属性,我与Privilege的多对多--> 3. 4. 5. 6. 7. --roles属性,我与Role的多对多--> 8. 9. 10. 11. 12. 13. --parent属性,我与Privilege(上级)的多对一--> 14. 15. 16. --children属性,我与Privilege(下级)的一对多--> 17. 18. 19. 20. 将配置文件重写之后放到src下也可以实现重写 数组int[]a=newint[3]; 只有模型才必须压入到栈中 再转到编辑页面之前我必须将模型压入到栈中 Column就是外键 ${pageContext.request.contextPath}/Jquery001=webroot这两个webroot不一样 <%=basePath%>http: //localhost: 8080/Jquery001/ =webroot Action是直接去访问命名空间中的action,它是网络访问,它访问的也是一个完整的网络地址路径 Webroot就是工程根,访问配置文件属于本地访问 <%@includefile="/WEB-INF/jsp/public/commons.jsp"%>web-inf下的都是相对于web-inf(根) src="${pageContext.request.contextPath}/script/jquery.js"> 如果是在web-inf之外,则要在之前加${pageContext.request.contextPath} Log4j的配置也是必须的 Web-inf下面只存放lib与jsp 在prepare当中封装的参数不能得到forum.getId() 凡是在**action中的东西都会被放到valuestack中 必须设置 hiddenname="id"> hidden>,因为是要靠它来增删改查实体的 ActionContext.getContext().getValueStack().push(forum);将对象放入值栈栈顶 值栈对应的是action ActionContext.getContext().put("forumList",forumList);将某个值放入StackContextTheseitemsareavailableusingthe#keynotation 对于一个未实现的方法可以抛出一个异常 thrownewUnsupportedOperationException(); 上移跟上面的位置换一下,下移跟下面的位置换一下 泛型当中的参数所代表的类型,其中的方法可以直接拿来使用 getSesstion().createQuery( "fromforumfwheref.position orderbyf.positiondesc") .setParameter(0,forum.getId()).setFirstResult(0) .setMaxResults (1).uniqueResult();//排在我之上的Forum Return返回值或结束方法的执行 1: #status.odd是否奇数行 2: #status.count当前行数 3: #status.index当前行的序号,从0开始『#status.count=#status.index+1』 4: #status.first是否第一行 5: #status.last是否最后一行 6: #status.modules(int)当前行数取模 时间的映射date/time/timestamp 字符串的映射string/texttext是char默认长度255 可将many—to—one看成一个普通属性,其中的class就是typecolumn就是别名 Subclass最后只形成一个表,其中的列是父类加子类的属性和,约束是其中子类的列必须可以为空 joined-subclass父类与子类各有各的表,表中的列只是自己的属性,三个子类表通过主键关联到超类表 union—subclass每个类都有各自的表,每个表中都有完整的属性,超类是抽象类,则不生成表 一对一: 基于外键(任何情况都可以使用)、基于主键单向关联 1getCurrentSession创建的session会和绑定到当前线程,而openSession不会。 2getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭 这里getCurrentSession本地事务(本地事务: jdbc)时要在配置文件里进行如下设置 *如果使用的是本地事务(jdbc事务) *如果使用的是全局事务(jta事务) getCurrentSession()使用当前的session openSession() 重新建立一个新的session 在一个应用程序中,如果DAO层使用Spring的hibernate模板,通过Spring来控制session的生命周期,则首选getCurrentSession()。 --EnableHibernate'sautomaticsessioncontextmanagement--> -- --> 通过Spring来控制session的 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。中用${}