ERP项目笔记2

部门管理—页面跳转

         部门管理是本项目中的一个独立开发模块,在制作时按照单表操作的思想进行,后期如果存在有关联关系进行二次开发,再追加关联关系。

1.     功能入口为部门维护连接


2.     创建出部门相关的后台模块包层次结构,并初始化表,类,接口,配置文件

Create table ‘tbl_dep’(

‘uuid’ bigint(20) NOTNULL auto_increment,

‘name’ varchar(30)NOT NULL COMMENT’部门名称’,

‘tele’ varchar(30) NOT NULL COMMENT’部门电话’,

PROMARY KEY(‘uuid’)

扫描二维码关注公众号,回复: 4126690 查看本文章

)ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8




3.     设置连接地址为访问的depAction中的list方法,设置跳转部门列表页面

Main.jsp中修改跳转链接

         <tr>

         <td><aclass=”hei” target=” main” href=”dep_list.action”></a></td>

</tr>

         DepAction类中定义访问方法

                  Publicclass DepAction extends BaseAction{

                  Public DepModel dm=newDepModel();

                  Public DepQueryModel dqm= newDepQueryModel();

                  //注入

         private DepEbi depEbi;

         public void setDepEbi(DepEbi depEbi){

this. depEbi= depEbi;

}

//跳转到部门列表页

public String list(){

         return “list”;

}

}

Structs.xml 中设置跳转页面,并拷贝页面

<action name=”dep_*” class=”depAction” method=”{1}”>

         <resultname=”list”>/WEB-INF/jsps/dep/list.jsp</result>

</action>

4.     重启服务器,刷新页面,测试功能

此类步骤,有后不再重复。

[开发技巧]

1.     制作实体模型类时,模型在不是必须使用某关联关系时,不要急于配置关系,否则会关联查询出很多不必要的数据,在使用OpenSessionInView后,关联数据将被延迟加载,并且要兼顾数据更新问题(在角色与资源中出现此问题),所以能不配置尽量不要配置。当然配置后也不会出错。

2.每次页面进行修改后,千万要区分链接入口是否修改,如果修改,一点要刷新页面,否则可能新的修改没有被应用,浪费大量调试时间。

部门管理—添加新部门

1.     功能入口为新建按钮


         业务分析:进入部门添加页面是否需要进行后台数据获取,如需要获取必须转入Action

执行流程,否则可以使用页面跳转格式进行。此处跳转无需获取后台数据,选用页面跳转格式。

2.     设置页面跳转为转入添加部门页面

页面访问设置为pages_dep_input.action,也可以省略.action后缀。前提是web.xml中拦截所有请求。

<a href=”page_dep_input.action”>

         <imgscr=”images/can_b_02.gif” boeder=”0”/>

</a>

Structs.xml中添加通用的页面跳转action配置

                  <actionname=”pages_*_*”>

         <result>/WEB-INF/jsps/{1}/{2}.jsp</result>

</action>

         此处不能配置成page_XXX的格式,否则将与前面的模块产生配置冲突

         由于部门模块业务比较简单,添加时无需获取其他数据,因此可以使用上述形式完成。实际开发过程中,进入部门添加时,还需要加载其他数据。因此需要通过后台方法完成。建议通过input方法完成此操作,参看修改功能设计。通过是否存在uuid传值对添加功能与修改进行区分。

3.     重启服务器,刷新页面,测试功能。


4.     修改input页面为structs标签格式

<s:form action=”dep_save” method=”post”>

5.     为保存按钮添加form表单事件(jquery格式)为保存连接添加id=”commit”

<a href=”javascript:void(0)”  id=” commit” >

          <imgsrc=”image/order_tuo.gif” border=”0”/>

</a>

为id为commit的组件绑定jquery提交表单事件。

$(function(){

 $(“#commit”).click(function(){

          $(“form:first”).submit();

});

});

6.     后台完成save方法的三层调用及持久化

Action

//添加部门

public String save(){

         depEbi.save(dm);

         return list();

}

Ebo

public void save(DepModel dm){

         depDao.save(dm);

}

Impl

public void save(DepModel dm){

         this.getHibernateTemplate().save(dm);

}

7.     重启服务器,刷新页面,测试功能


由于目前已经绑定了Session登陆校验,当服务器重启后Session中无登陆用户数据,因此在进行任何操作,强制跳转登陆界面。

登陆后验证功能


由于目前list页面数据为静态数据,无法查看功能是否完成,暂时使用查看数据库的方式验证。


功能测试成功

[知识总结]

         Structs通过属性驱动的方式从页面收集传递的参数,此种方法相对于模型驱动灵活性强,并且一个页面中收集的数据不可能全部收集到一个实体类对象中。推荐使用属性驱动方式设计。

属性驱动与模型驱动参考:http://www.cnblogs.com/jbelial/archive/2013/09/01/3294520.html

[开发技巧]

         登陆校验可以保证登陆人信息必然存在,不推荐将其功能取消,否则后期因为未登陆造成的问题将不易被察觉,导致后期数据任务失败。

[扩展业务]

         业务层数据校验

部门管理--部门信息列表

         部门信息列表中的数据目前是静态数据,需要将其修改为动态数据。

1.     修改Action中数据获取并将后台业务进行实现。

Action

//跳转到部门列表

Public String list(){

         List<DepModel>depList=depEbi.getAll();

         //将数据放入指定范围

         ActionContext.getContext.put(“depList”,depList);

return “list”;

}

Ebo

public List<DepModel> getAll(){

         returndepDao.getAll();

}

Impl

Public List<DepModel> getAll(){

         String hql=”fromDepModel”;

         Returnthis.getHibernateTemplate().find(hql);

}

2.     修改页面格式为加载动态数据

<s:iterator value=”depList”>

      <tr align=”center”bgcolor=”#FFFFFF”>

               <td width=”13%”height=”30”>${uuid}</td>

               <td>${name}</td>

<td>${tele}</td>

</tr>

</s:iterator>

         说明:获取数据时,可以使用#depList的格式获取,也可以使用depList格式获取,两种格式均正确,为了输入方便,省略掉#。

3.刷新页面,重启服务器

        

         功能完成,但是页面上显示多余信息。该数据是为了避免无数据可显示的时候,页面无提示造成的误解。以为程序出问题,为其添加判定,当无数据可显示时才显示出来。

<s:if test=”#depList.size()==0”>

         <centr>

                  <spanstyle=”font-size:20px;color:#96D34A;font-weight:bold”>

         没有查到满足条件数据

</span>

</center>

</s:if>

<s:else>

         <tablewidth=”100%” border=”1” cellpadding=”0” cellspacing=”0”>

 

</table>

</s:else>

说明:此处test表达式中,不能省略#号,否则无法获取。

PS:项目中所有模块均参照以上流程制作,后面将不再重复此类笔记内容。

[知识总结]

1.     关于Action中在request与session范围内存取值。

2.     Structs的if标签中test属性使用的OGNL表达式,参看OGNL规则。

[开发技巧]

         页面获取后台存放的数据,可以使用的方式有很多,实际开发应该使用最简化风格,或者标准格式。此处使用最简化风格。

猜你喜欢

转载自blog.csdn.net/qq_35192584/article/details/77844537
erp