您的位置:首页 > 其它

OA总结

2016-04-02 11:20 281 查看
1. 使用s:a标签,可以自动生成工程名前缀和扩展名后缀,且会自动将中文转换为UTF-8编码

提示文本框确定是否要删除

<s:a action="role_delete?id=%{id}" onclick="return confirm('确定要删除么?')">删除</s:a>

2. 页面或者配置文件中的动作带参数,在POJO中或者实现modelDriven,自己写参数传来的字段,

并设置getter/setter属性(modelDriver中可以不写,POJO中可以定义自己的),则可以自动获取

3.

4. 修改页面数据回显:

// 方式1:将要回显数据的对象放到map域中

/** 修改页面 */

public String editUI() throws Exception {

// 准备要回显的数据并将其放到map域中

Role role = roleService.getById(model.getId());

ActionContext.getContext().put("role",role);

// 注: 如果放到map域中还需要设置字段的值用来回显

model.setName(role.getName());

return "saveUI";

}

<body>

<s:form action="role_edit">

<s:hidden name="id"></s:hidden>

名称:<s:textfield name="name" ></s:textfield> <br/><br/>

<!--

注: 此时实际上省略了默认的value属性,完整如下:

<s:textfield name="name" value="%{name}"></s:textfield> <br/><br/>

-->

<s:submit value="添加"></s:submit>

</s:form>

</body>

// 方式2:将要回显数据的对象放到值栈对象的栈顶,在jsp页面获取属性方便,常用

/** 修改页面 */

public String editUI() throws Exception {

// 准备要回显的数据

Role role = roleService.getById(model.getId());

// 得到值栈对象并将要回显数据的对象放在栈顶,这样可以方便直接获取

ActionContext.getContext().getValueStack().push(role);

return "saveUI";

}

<body>

<s:form action="role_edit">

<s:hidden name="id"></s:hidden>

名称:<s:textfield name="name" ></s:textfield> <br/><br/>

<s:submit value="添加"></s:submit>

</s:form>

</body>

5. 使用UML设计实体

6. 合并添加修改页面的方式:

1. Action中 addUI()和editUI()的方法的返回值都为saveUI,saveUI转向saveUI.jsp

2. 写saveUI.jsp,根据是否传id值来确定是转向添加页面还是修改页面

<s:form action="role_%{id==null?'add':'edit'}">

<s:hidden name="id"></s:hidden>

......其他内容

</s:form>

7. 步骤:

注: 此时是没有BaseAction,BaseDao,BaseDaoImpl的一般的MVC模式

1. 创建Action类,并在类上加注解@Controller和@Scope("prototype")

2. 写其中的方法:CRUD的6个方法(方法名、返回值、注释)

3. 创建JSP页面,此时为提示界面,并未完全实现

4. 配置struts.xml

5. 测试

6. 创建空的service接口,并在action中创建引用,并在引用上面写@Resource注解

7. 实现Action中的方法,此时先在service中创建需要的方法,先写注视但不实现

8. 创建serviceImpl类,并在类上写@Service注解,实现service接口中的方法

9. 创建空的dao接口,并在service中创建引用,并在引用上面写@Resource注解

10.创建daoImpl类,并在类上写@Repository注解,实现dao接口中的方法

11.写页面

12.测试

8. alt + shift + a : 快操作模式

9. 不要同时解决俩个大问题,分开解决。 关注当前的问题。

10.struts2标签的回显 案例中的部门回显

11.如果想级联删除关联的元素,在POJO.hbm.xml配置中对应的属性添加cascade属性即可

注意与inverse的区别,inverse是用来维护关系的,并没有删除元素,只是解除了关系。

12.要使用全角空格来避免网页自动忽略空格

13.修改类似syso之类的快捷键模版:

eg: 将ActionContext.getContext().put("",..);改为put快捷键

Window--> preferences --> 查找template --> 选中Templates

点击New, Name改为put,

Pattern改为: ActionContext.getContext().put("${var}",${var});${cursor}即可;

注:${var}表示临近的变量。

14.会使用静态包含导入公共的header.jspf片段,然后在子JSP中引入该片段

<%@ include file="/WEB-INF/jsp/public/header.jspf"%>

15.@Transaction注解,当写到类上时,

该注解可以被继承:对本类中的公共方法有效,对子类中的公共方法有效。

但是对父类中的公共方法无效。所以该注解一般写在父类上。

注:注解是否可以被继承,需要在配置中配置。

16.struts标签<s:select multiple="true"/>即为多选

<s:radio name="gender" list=" %{ #{'男':'男','女':'女'} } "/>

<s:radio name="gender" list=" %{ {'男','女'} } "/>

17.public List<T> getByIds(Long[] ids) {

if (ids == null || ids.length == 0) {

// 对于集合,如果为null,不要返回null,

// 应返回的是空的list集合,但是ArrayList定义一个默认长度是10,会占用资源

// 所以使用Collections.EMPTY_LIST,里面没有长度,不占用资源

return Collections.EMPTY_LIST;

}

return list;



18. 需要jar包: commons-codec-1.3.jar

使用codec.digest.DigestUtils包的DigestUtils的md5Hex方法

设置默认的密码为123456

String md5 = DigestUtils.md5Hex("123456");

19. 先完成一个模块,当做下一个模块时,需要关联之前的模块时,可以在修改。

20. 如果有需要刚开始就放到数据库中的内容,在需要自己创建一个初始化类,

直接用SessionFactory.getSession().save(entity)保存即可

21. treeView插件树状结构的使用

22. 在jsp页面中写<%-- --%>注释,不会在源代码上显示,而<!-- --!>会在JSP页面中显示

23. set无序,不重复;

list有序,重复;

TreeSet和LinkedHashSet有序,

24. POJO.hbm.xml配置文件中,<set>元素有一个order-by属性,可以用来排序,使得查询出来的数据

列表按一定的顺序(以某一字段为序)显示,

25. 用户的登录与注销可以单独写一个Action

由ActionContext获取session: 不依赖servletAPI

ActionContext.getContext().getSession();

而由request获取session,则以来ServletAPI

ActionContext.getContext().getRequest().getSession(); 没有这个方法

26. 在Action中可以直接使用addFieldError("login","密码不正确");

可以在JSP页面中用如下方式获取错误:

<s:fielderror fieldName="login"/> 显示指定的错误

<s:fielderror />
显示所有的错误

27. struts2标签通过showPassword="false"属性设置密码不需要回显

<s:password size="20" cssClass="TextField" showPassword="false" name="password" />

28. <s:a action="user_list">用户列表</s:a>

等价于<a href="${pageContext.request.contextPath}/userAction_list.do">用户列表</a>

29. 学会使用FrameSet来控制页面布局

30. @Scope("prototype")是为了是为了线程安全问题而使用的多例。

当没有涉及公共资源时,该注解可以省略,即可以使用单例

31. 比方说权限这类数据,数据量不大,又一直要用,而且每次查询的所有权限结果列表都一样,

所以可以将其放到缓存中,查询一级即可。 要放到公共存放数据的地方,所以要放到application中

32. 技巧:当遍历时需要对应的图标时,可以在图片的路径中图片的名称改为${id},

然后将图片的名称改为对应的id即可。

如: 遍历: <img src="style/images/MenuIcon/${id}.gif" class="Icon" />

33. 获取session:

pageContext.getSession().getAttribute("user");

而在Action中获取session:

ActionContext.getContext().getSession().getAttribute("user");

34. // 获取全局的作用域application

ServletContext application = sce.getServletContext();

// 获取spring的监听器中创建的spring容器对象

ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(application);

// 从spring容器中取出PrivilegeService的对象实例

PrivilegeService privilegeService = (PrivilegeService) ac.getBean("privilegeServiceImpl");

// 查询出所有权限的Url集合并放到application作用域中

List<String> allPrivilegeUrls = privilegeService.getAllPrivilegeUrls();

application.setAttribute("allPrivilegeUrls", allPrivilegeUrls);

// 注: 此处将topPrivilegeList放到了application作用域中了,在jsp中要用#application.topPrivilegeList获取

application.setAttribute("topPrivilegeList", topPrivilegeList);

Collection<String> allPrivilegeUrls = (Collection<String>) ActionContext.getContext().getApplication().get("allPrivilegeUrls");

35. 区分struts2的监听器,拦截器

监听器要写监听器类,实现监听器接口,并在web.xml中配置

拦截器要写拦截器类,实现拦截器接口,并在struts.xml文件中配置拦截器栈。

36. 解决tomcat重启后还得继续登录的问题:

实现序列化接口:

在tomcat关闭的时候,会将session钝化到C:\apache-tomcat-6.0.35\work\Catalina\localhost\itcastOA,生成一个文件

在tomcat重启的时候,会将钝化后的session文件从目录中序列化还原到内存中,该文件消失,

然后刷新页面的时候不用再重新登录,仍然是原有的User对象。

37. 登录页面嵌套的问题:

session的默认存在时间为半小时,如果过半小时未操作,则会注销。

模拟: 在新建页面打开, 然后注销,在原来的窗口点连接,会在目标位置出现登录页面,

而不是在整个页面显示登录页面,出现了登录页面嵌套的问题。

解决方案:

方案1:刷新一下即可;

方案2:在loginoutUI.jsp页面添加:

<head>

<script type="text/javascript">

// 如果有父窗口,就在父窗口刷新

if(window.parent != window){

window.parent.location.href = window.location.href;

}

</script>

</head>

38. HQL语句

分页:

如下 没有limit关键字,需通过setFirstResult(0)和setMaxResults(1)方法指定

CASE语句:

"FROM Topic t WHERE t.forum=? ORDER BY (CASE t.type WHEN 2 THEN 2 ELSE 0 END) DESC, t.lastUpdateTime DESC")//

39. <%-- 最上面的不能上移 注:status在map栈中,所有要加#号--%>

<s:iterator value="forumList" status="status">

<s:if test="#status.first">

<span style="color: gray; cursor: pointer" >上移</span>

</s:if>

<s:else>

<s:a action="forumManage_moveUp?id=%{id}">上移</s:a>

</s:else>

</s:iterator>

40. ctrl + H 快捷键 搜索

41. 学会使用jquery的validation框架

42. struts2标签转换日期格式:

<s:date name="lastTopic.postTime" format="yyyy年MM月dd日 HH:mm:ss"/>

43. 防止HTML标签的自动转义

<s:property value="#topic.title" escape="true"/>

44. 在线编辑器FCKeditor的使用

45. // TODO待完成任务 FIXME紧急任务

46. 注释的时候有多行,加<br/>可以实现换行

47.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: