精华内容
下载资源
问答
  • 文章目录岗位管理界面 /system/postSysPostController控制岗位管理查询岗位列表 /system/post/listservice层dao层pojo - sys_post 岗位表新增岗位 /system/post/add显示add页面 GET请求新增保存 POST请求修改岗位 /...

    岗位管理界面 /system/post

    在这里插入图片描述

    SysPostController控制岗位管理

    /**
     * 岗位信息操作处理
     * 
     * @author ruoyi
     */
    @Controller
    @RequestMapping("/system/post")
    public class SysPostController extends BaseController
    {
        private String prefix = "system/post";
    
        @Autowired
        private ISysPostService postService;
    
        @RequiresPermissions("system:post:view")
        @GetMapping()
        public String operlog()
        {
            return prefix + "/post";
        }
        
        //之后是各种Controllers...
    

    查询岗位列表 /system/post/list

        /**
         * 查询岗位列表
         * @param post
         * @return
         */
        @RequiresPermissions("system:post:list")
        @PostMapping("/list")
        @ResponseBody
        public TableDataInfo list(SysPost post)
        {
            startPage();
            List<SysPost> list = postService.selectPostList(post);
            return getDataTable(list);
        }
    

    service层

        /**
         * 查询岗位信息集合
         * 
         * @param post 岗位信息
         * @return 岗位信息集合
         */
        @Override
        public List<SysPost> selectPostList(SysPost post)
        {
            return postMapper.selectPostList(post);
        }
    

    dao层

    	<select id="selectPostList" parameterType="SysPost" resultMap="SysPostResult">
    	<include refid="selectPostVo"/>
    	<where>
    		<if test="postCode != null and postCode != ''">
    			AND post_code like concat('%', #{postCode}, '%')
    		</if>
    		<if test="status != null and status != ''">
    			AND status = #{status}
    		</if>
    		<if test="postName != null and postName != ''">
    			AND post_name like concat('%', #{postName}, '%')
    		</if>
    	</where>
    </select>
    

    pojo - sys_post 岗位表

    package com.ruoyi.system.domain;
    
    import javax.validation.constraints.*;
    import org.apache.commons.lang3.builder.ToStringBuilder;
    import org.apache.commons.lang3.builder.ToStringStyle;
    import com.ruoyi.common.annotation.Excel;
    import com.ruoyi.common.annotation.Excel.ColumnType;
    import com.ruoyi.common.core.domain.BaseEntity;
    
    /**
     * 岗位表 sys_post
     * 
     * @author ruoyi
     */
    public class SysPost extends BaseEntity
    {
        private static final long serialVersionUID = 1L;
    
        /** 岗位序号 */
        @Excel(name = "岗位序号", cellType = ColumnType.NUMERIC)
        private Long postId;
    
        /** 岗位编码 */
        @Excel(name = "岗位编码")
        private String postCode;
    
        /** 岗位名称 */
        @Excel(name = "岗位名称")
        private String postName;
    
        /** 岗位排序 */
        @Excel(name = "岗位排序", cellType = ColumnType.NUMERIC)
        private String postSort;
    
        /** 状态(0正常 1停用) */
        @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
        private String status;
    
        /** 用户是否存在此岗位标识 默认不存在 */
        private boolean flag = false;
    
        public Long getPostId()
        {
            return postId;
        }
    
        public void setPostId(Long postId)
        {
            this.postId = postId;
        }
    
        @NotBlank(message = "岗位编码不能为空")
        @Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符")
        public String getPostCode()
        {
            return postCode;
        }
    
        public void setPostCode(String postCode)
        {
            this.postCode = postCode;
        }
    
        @NotBlank(message = "岗位名称不能为空")
        @Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符")
        public String getPostName()
        {
            return postName;
        }
    
        public void setPostName(String postName)
        {
            this.postName = postName;
        }
    
        @NotBlank(message = "显示顺序不能为空")
        public String getPostSort()
        {
            return postSort;
        }
    
        public void setPostSort(String postSort)
        {
            this.postSort = postSort;
        }
    
        public String getStatus()
        {
            return status;
        }
    
        public void setStatus(String status)
        {
            this.status = status;
        }
    
        public boolean isFlag()
        {
            return flag;
        }
    
        public void setFlag(boolean flag)
        {
            this.flag = flag;
        }
    
        @Override
        public String toString() {
            return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("postId", getPostId())
                .append("postCode", getPostCode())
                .append("postName", getPostName())
                .append("postSort", getPostSort())
                .append("status", getStatus())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .append("remark", getRemark())
                .toString();
        }
    }
    
    

    在这里插入图片描述

    新增岗位 /system/post/add

    显示add页面 GET请求

        /**
         * 新增岗位
         */
        @GetMapping("/add")
        public String add()
        {
            return prefix + "/add";
        }
    

    在这里插入图片描述

    新增保存 POST请求

    在这里插入图片描述

        /**
         * 新增保存岗位
         */
        @RequiresPermissions("system:post:add")
        @Log(title = "岗位管理", businessType = BusinessType.INSERT)
        @PostMapping("/add")
        @ResponseBody
        public AjaxResult addSave(@Validated SysPost post)
        {
            if (UserConstants.POST_NAME_NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
            {
                return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
            }
            else if (UserConstants.POST_CODE_NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
            {
                return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
            }
            post.setCreateBy(ShiroUtils.getLoginName());
            return toAjax(postService.insertPost(post));
        }
    

    修改岗位 /system/post/edit/{postId}

    信息回显

    在这里插入图片描述

        /**
         * 修改岗位
         */
        @GetMapping("/edit/{postId}")
        public String edit(@PathVariable("postId") Long postId, ModelMap mmap)
        {
            mmap.put("post", postService.selectPostById(postId));
            return prefix + "/edit";
        }
    

    信息校验

    岗位名称校验 /system/post/checkPostNameUnique

        /**
         * 校验岗位名称
         */
        @PostMapping("/checkPostNameUnique")
        @ResponseBody
        public String checkPostNameUnique(SysPost post)
        {
            return postService.checkPostNameUnique(post);
        }
    
    

    岗位编码校验 /system/post/checkPostCodeUnique

        /**
         * 校验岗位编码
         */
        @PostMapping("/checkPostCodeUnique")
        @ResponseBody
        public String checkPostCodeUnique(SysPost post)
        {
            return postService.checkPostCodeUnique(post);
        }
    

    保存修改

        /**
         * 修改保存岗位
         */
        @RequiresPermissions("system:post:edit")
        @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
        @PostMapping("/edit")
        @ResponseBody
        public AjaxResult editSave(@Validated SysPost post)
        {
            if (UserConstants.POST_NAME_NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
            {
                return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
            }
            else if (UserConstants.POST_CODE_NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
            {
                return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
            }
            post.setUpdateBy(ShiroUtils.getLoginName());
            return toAjax(postService.updatePost(post));
        }
    

    删除岗位 /system/post/remove

        /**
         * 删除岗位
         * @param ids
         * @return
         */
        @RequiresPermissions("system:post:remove")
        @Log(title = "岗位管理", businessType = BusinessType.DELETE)
        @PostMapping("/remove")
        @ResponseBody
        public AjaxResult remove(String ids)
        {
            try
            {
                return toAjax(postService.deletePostByIds(ids));
            }
            catch (Exception e)
            {
                return error(e.getMessage());
            }
        }
    

    切面AOP - 日志记录切面LogAspect

    在这里插入图片描述

    package com.ruoyi.framework.aspectj;
    
    import java.lang.reflect.Method;
    import java.util.Map;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.Signature;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.aspectj.lang.reflect.MethodSignature;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    import com.ruoyi.common.annotation.Log;
    import com.ruoyi.common.enums.BusinessStatus;
    import com.ruoyi.common.json.JSON;
    import com.ruoyi.common.utils.ServletUtils;
    import com.ruoyi.common.utils.StringUtils;
    import com.ruoyi.framework.manager.AsyncManager;
    import com.ruoyi.framework.manager.factory.AsyncFactory;
    import com.ruoyi.framework.util.ShiroUtils;
    import com.ruoyi.system.domain.SysOperLog;
    import com.ruoyi.system.domain.SysUser;
    
    /**
     * 操作日志记录处理
     * 
     * @author ruoyi
     */
    @Aspect
    @Component
    public class LogAspect
    {
        private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
    
        //之后是切面类的配置及切面方法...
    }
    

    pojo - sys_oper_log 操作日志记录表

    在这里插入图片描述

    package com.ruoyi.system.domain;
    
    import org.apache.commons.lang3.builder.ToStringBuilder;
    import org.apache.commons.lang3.builder.ToStringStyle;
    import java.util.Date;
    import com.ruoyi.common.annotation.Excel;
    import com.ruoyi.common.annotation.Excel.ColumnType;
    import com.ruoyi.common.core.domain.BaseEntity;
    
    /**
     * 操作日志记录表 oper_log
     * 
     * @author ruoyi
     */
    public class SysOperLog extends BaseEntity
    {
        private static final long serialVersionUID = 1L;
    
        /** 日志主键 */
        @Excel(name = "操作序号", cellType = ColumnType.NUMERIC)
        private Long operId;
    
        /** 操作模块 */
        @Excel(name = "操作模块")
        private String title;
    
        /** 业务类型(0其它 1新增 2修改 3删除) */
        @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据")
        private Integer businessType;
    
        /** 业务类型数组 */
        private Integer[] businessTypes;
    
        /** 请求方法 */
        @Excel(name = "请求方法")
        private String method;
    
        /** 请求方式 */
        @Excel(name = "请求方式")
        private String requestMethod;
    
        /** 操作类别(0其它 1后台用户 2手机端用户) */
        @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户")
        private Integer operatorType;
    
        /** 操作人员 */
        @Excel(name = "操作人员")
        private String operName;
    
        /** 部门名称 */
        @Excel(name = "部门名称")
        private String deptName;
    
        /** 请求url */
        @Excel(name = "请求地址")
        private String operUrl;
    
        /** 操作地址 */
        @Excel(name = "操作地址")
        private String operIp;
    
        /** 操作地点 */
        @Excel(name = "操作地点")
        private String operLocation;
    
        /** 请求参数 */
        @Excel(name = "请求参数")
        private String operParam;
    
        /** 返回参数 */
        @Excel(name = "返回参数")
        private String jsonResult;
    
        /** 操作状态(0正常 1异常) */
        @Excel(name = "状态", readConverterExp = "0=正常,1=异常")
        private Integer status;
    
        /** 错误消息 */
        @Excel(name = "错误消息")
        private String errorMsg;
    
        /** 操作时间 */
        @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
        private Date operTime;
    
        public Long getOperId()
        {
            return operId;
        }
    
        public void setOperId(Long operId)
        {
            this.operId = operId;
        }
    
        public String getTitle()
        {
            return title;
        }
    
        public void setTitle(String title)
        {
            this.title = title;
        }
    
        public Integer getBusinessType()
        {
            return businessType;
        }
    
        public void setBusinessType(Integer businessType)
        {
            this.businessType = businessType;
        }
    
        public Integer[] getBusinessTypes()
        {
            return businessTypes;
        }
    
        public void setBusinessTypes(Integer[] businessTypes)
        {
            this.businessTypes = businessTypes;
        }
    
        public String getMethod()
        {
            return method;
        }
    
        public void setMethod(String method)
        {
            this.method = method;
        }
    
        public String getRequestMethod()
        {
            return requestMethod;
        }
    
        public void setRequestMethod(String requestMethod)
        {
            this.requestMethod = requestMethod;
        }
    
        public Integer getOperatorType()
        {
            return operatorType;
        }
    
        public void setOperatorType(Integer operatorType)
        {
            this.operatorType = operatorType;
        }
    
        public String getOperName()
        {
            return operName;
        }
    
        public void setOperName(String operName)
        {
            this.operName = operName;
        }
    
        public String getDeptName()
        {
            return deptName;
        }
    
        public void setDeptName(String deptName)
        {
            this.deptName = deptName;
        }
    
        public String getOperUrl()
        {
            return operUrl;
        }
    
        public void setOperUrl(String operUrl)
        {
            this.operUrl = operUrl;
        }
    
        public String getOperIp()
        {
            return operIp;
        }
    
        public void setOperIp(String operIp)
        {
            this.operIp = operIp;
        }
    
        public String getOperLocation()
        {
            return operLocation;
        }
    
        public void setOperLocation(String operLocation)
        {
            this.operLocation = operLocation;
        }
    
        public String getOperParam()
        {
            return operParam;
        }
    
        public void setOperParam(String operParam)
        {
            this.operParam = operParam;
        }
    
        public String getJsonResult()
        {
            return jsonResult;
        }
    
        public void setJsonResult(String jsonResult)
        {
            this.jsonResult = jsonResult;
        }
    
        public Integer getStatus()
        {
            return status;
        }
    
        public void setStatus(Integer status)
        {
            this.status = status;
        }
    
        public String getErrorMsg()
        {
            return errorMsg;
        }
    
        public void setErrorMsg(String errorMsg)
        {
            this.errorMsg = errorMsg;
        }
    
        public Date getOperTime()
        {
            return operTime;
        }
    
        public void setOperTime(Date operTime)
        {
            this.operTime = operTime;
        }
    
        @Override
        public String toString() {
            return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("operId", getOperId())
                .append("title", getTitle())
                .append("businessType", getBusinessType())
                .append("businessTypes", getBusinessTypes())
                .append("method", getMethod())
                .append("requestMethod", getRequestMethod())
                .append("operatorType", getOperatorType())
                .append("operName", getOperName())
                .append("deptName", getDeptName())
                .append("operUrl", getOperUrl())
                .append("operIp", getOperIp())
                .append("operLocation", getOperLocation())
                .append("operParam", getOperParam())
                .append("status", getStatus())
                .append("errorMsg", getErrorMsg())
                .append("operTime", getOperTime())
                .toString();
        }
    }
    
    

    配置切入点:有@Log注解的类都会被切入

        // 配置织入点
        @Pointcut("@annotation(com.ruoyi.common.annotation.Log)")
        public void logPointCut()
        {
        }
    

    handleLog方法 - 记录日志

        protected void handleLog(final JoinPoint joinPoint, final Exception e, Object jsonResult)
        {
            try
            {
                // 获得注解
                Log controllerLog = getAnnotationLog(joinPoint);
                if (controllerLog == null)
                {
                    return;
                }
    
                // 获取当前的用户
                SysUser currentUser = ShiroUtils.getSysUser();
    
                // *========数据库日志=========*//
                SysOperLog operLog = new SysOperLog();
                operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
                // 请求的地址
                String ip = ShiroUtils.getIp();
                operLog.setOperIp(ip);
                // 返回参数
                operLog.setJsonResult(JSON.marshal(jsonResult));
    
                operLog.setOperUrl(ServletUtils.getRequest().getRequestURI());
                if (currentUser != null)
                {
                    operLog.setOperName(currentUser.getLoginName());
                    if (StringUtils.isNotNull(currentUser.getDept())
                            && StringUtils.isNotEmpty(currentUser.getDept().getDeptName()))
                    {
                        operLog.setDeptName(currentUser.getDept().getDeptName());
                    }
                }
    
                if (e != null)
                {
                    operLog.setStatus(BusinessStatus.FAIL.ordinal());
                    operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
                }
                // 设置方法名称
                String className = joinPoint.getTarget().getClass().getName();
                String methodName = joinPoint.getSignature().getName();
                operLog.setMethod(className + "." + methodName + "()");
                // 设置请求方式
                operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
                // 处理设置注解上的参数
                getControllerMethodDescription(controllerLog, operLog);
                // 保存数据库
                AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
            }
            catch (Exception exp)
            {
                // 记录本地异常日志
                log.error("==前置通知异常==");
                log.error("异常信息:{}", exp.getMessage());
                exp.printStackTrace();
            }
        }
    

    @AfterReturning方法

        /**
         * 处理完请求后执行
         *
         * @param joinPoint 切点
         */
        @AfterReturning(pointcut = "logPointCut()", returning = "jsonResult")
        public void doAfterReturning(JoinPoint joinPoint, Object jsonResult)
        {
            handleLog(joinPoint, null, jsonResult);
        }
    

    @AfterThrowing方法

        /**
         * 拦截异常操作
         * 
         * @param joinPoint 切点
         * @param e 异常
         */
        @AfterThrowing(value = "logPointCut()", throwing = "e")
        public void doAfterThrowing(JoinPoint joinPoint, Exception e)
        {
            handleLog(joinPoint, e, null);
        }
    
        
    

    获取获取注解中对方法的描述信息(用于Controller层注解)

        /**
         * 获取注解中对方法的描述信息 用于Controller层注解
         * 
         * @param log 日志
         * @param operLog 操作日志
         * @throws Exception
         */
        public void getControllerMethodDescription(Log log, SysOperLog operLog) throws Exception
        {
            // 设置action动作
            operLog.setBusinessType(log.businessType().ordinal());
            // 设置标题
            operLog.setTitle(log.title());
            // 设置操作人类别
            operLog.setOperatorType(log.operatorType().ordinal());
            // 是否需要保存request,参数和值
            if (log.isSaveRequestData())
            {
                // 获取参数的信息,传入到数据库中。
                setRequestValue(operLog);
            }
        }
    

    获取请求的参数,放到log中

        /**
         * 获取请求的参数,放到log中
         * 
         * @param operLog 操作日志
         * @throws Exception 异常
         */
        private void setRequestValue(SysOperLog operLog) throws Exception
        {
            Map<String, String[]> map = ServletUtils.getRequest().getParameterMap();
            String params = JSON.marshal(map);
            operLog.setOperParam(StringUtils.substring(params, 0, 2000));
        }
    

    是否存在注解,如果存在就获取

        /**
         * 是否存在注解,如果存在就获取
         */
        private Log getAnnotationLog(JoinPoint joinPoint) throws Exception
        {
            Signature signature = joinPoint.getSignature();
            MethodSignature methodSignature = (MethodSignature) signature;
            Method method = methodSignature.getMethod();
    
            if (method != null)
            {
                return method.getAnnotation(Log.class);
            }
            return null;
        }
    
    展开全文
  • 岗位(职位)管理模块主要是针对组织机构的岗位(职位)进行管理,包括:...登录系统后,选择“岗位管理”可以进入岗位管理模块。 岗位(职位)管理模块主界面如下图所示: 我们在增加与编辑岗位时,可以进行岗位...

      岗位(职位)管理模块主要是针对组织机构的岗位(职位)进行管理,包括:增加、修改、删除、移动、对岗位设置用户,设置岗位的权限等。岗位管理在企业应用中是一个普遍应用的模块,也属于其他业务应用的基础。合理的组织与规划组织机构下的岗位,对后期的管理可以起到事半功倍的效果。登录系统后,选择“岗位管理”可以进入岗位管理模块。

      岗位(职位)管理模块主界面如下图所示:


      我们在增加与编辑岗位时,可以进行岗位的用户设置,增加或编辑成功后,同样可以在“岗位管理”主界面单击“用户”进行岗位用户的关联设置。如下图所示: 


      在上图中可以看到当前岗位所拥有的用户,如果某个用户不再属于此岗位,那么可以移除该用户,也可以把某个有效用户添加到此岗位中,使其继承此岗位所拥有的所有权限。点击“添加用户”,打开“用户选择”对话框进行用户的选择,如下图所示:


      在用户选择界面可以按Control键进行多选,否则为单选,选择好用户后单击“选择”按钮即可把我们选择的用户添加到当前岗位中。如果用户过多,我们还可以进行模糊查询或者按角色分类进行展示,如下图所示:


      岗位权限设置界面,我们可以对所选岗位设置其可访问的模块(菜单),拥有的操作权限。

      岗位权限设置主界面,如下图所示:


      在上图的岗位权限设置界面,整个界面采用了全新的布局方式,最上面是业务系统选择下拉列表,这儿列出了所有的子系统可供选择,选择一个子系统后下面就会显示当前子系统所有的模块列表。选中对应模块前面的复选框就表示授予当前模块可访问的权限,选择一个模块右边就会列出当前模块所有的操作权限项列表,同理要授予某操作权限项,只需选中前面的复选框,取消权限只需要取消复选框的选择即可。右边的复选框可以操作的前提是左边其对应的模块的复选框被选中。否则就是灰色的不可选择,如下图所示。


     

    相关文章:       

         RDIFramework 平台代码生成器V3.2 发布版 

       RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录  

       RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍    

      V3.2 -> “用户管理”主界面使用多表头展示、增加打印功能
      V3.2 -> WinForm“组织机构管理”界面组织机构权限管理采用新的界面,操作权限按模块进行展示
      V3.2 -> Web 用户管理模块编辑界面-组织机构选择支持级联选择
      V3.2->WinForm版本新增新的角色授权管理界面效率更高、更规范
      V3.2->Web版本新增“文件管理中心”集上传、下载、文件共享等一身,非常实用的功能
      .NET快速信息化系统开发框架 V3.2->Web版本模块管理界面新增模块排序功能

      实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-Web

      RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件Web业务平台

      .NET快速信息化系统开发框架 V3.2 -> Web 用户管理模块编辑界面-组织机构选择支持级联选择

      NET快速信息化系统开发框架 V3.2 ->WinForm部分全部重构为Dev风格界面

      一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。 

          RDIFramework.NET官方网站:http://www.rdiframework.net/ 

          RDIFramework.NET官方博客:http://blog.rdiframework.net/ 

          同时需要说明的,以后的所有技术文章以官方网站为准,欢迎大家收藏! 

          RDIFramework.NET框架由专业团队长期打造、一直在更新、一直在升级,请放心使用!  

      欢迎关注RDIFramework.NET框架官方公众微信(微信号:guosisoft),及时了解最新动态。

       扫描二维码立即关注

     

    展开全文
  • 第一天学习总结:SSH框架的搭建...3:完成岗位的增删改查功能,分析功能,需要多少请求和页面(JSP)页面。   一:搭建框架,使其能访问跳转  1,设计实体---&gt;JavaBean----&gt;hbm.xml(映射文件)...

    第一天学习总结:SSH框架的搭建,并将各个文件进行分包处理。

    第二天完成任务:

    1:讲一下日志log4j.properties的配置;

    2:抽取BaseDao层的公共代码,对数据库增删改查;

    3:完成岗位的增删改查功能,分析功能,需要多少请求和页面(JSP)页面。

     

    一:搭建框架,使其能访问跳转

     1,设计实体--->JavaBean---->hbm.xml(映射文件)----->建表

    运行此方法表就创建好了

    什么时候创建的表?在创建sessionFactory的时候就回去检测和执行创建表,执行springTest的测试sessionFactory方法可以创建。

     

     

    2,分析有几个功能,对应几个请求。

    页面跳转中转发和重定向区别

    转发 请求数量1,地址栏不变

    重定向 请求数量2地址栏变化

    一个功能转到另一个功能使用重定向

    一个功能内的跳转用转发

    增删改查共4个功能,6个请求

    3,实现功能:

     (1)写action(准备数据)

     

    配置岗位管理jsp页面路径

    配置struts.xmll中role的action,其中class为roleAction,应该是从spring容器拿到的 

    所以需要将Action放入容器中,所以所有的Action的上面都需要添加注解@Controller 表示放入容器中,

     

    修改,路径写错了

    添加页面和配置

    现在运行就可以访问,并实现跳转了,接下来就写Action的内容

    二、写实现功能

    (1)写Action的方法确定service中的方法

    RoleAction.java   (创建相应)

    RoleService.java

     

    (2)写service方法确定Dao中的方法

    (3)写Dao 

    (4)写JSP

    list.jsp

    addUI.jsp

    RoleAction.java 完成添加功能

    get/set

    修改

     

     

     

    展开全文
  • OA的岗位管理功能模块的实现总结

    千次阅读 2013-08-15 09:34:55
    这个模块分了三个小的功能模块,分别是部门、岗位、员工 一、  1, 了解需求,这个通过静态页面来做.在工作的时候,需求都是由同事做好 的,再给程序员来实现,转换成动态的页面. 2, 设计 实体(设计数据库表) ...
    这个模块分了三个小的功能模块,分别是部门、岗位、员工
    

    一、  
    1,  了解需求,这个通过静态页面来做.在工作的时候,需求都是由同事做好 的,再给程序员来实现,转换成动态的页面.
    2,  设计 实体(设计数据库表)  
    对象-->表:正向工程。表-->对象:反向工程。
    几个实体?实体之间什么关系?每个实体有什么属 性(表单、列表)?
    1,主键。2,表单中要存储的字段。3,关系字段。4,为实现某功能而设计的字段。
    步骤:设计实体 -->JavaBean-->映射文件-->生成表  (-->写Dao)。
    集合要初始化
    这里包括三个地 方.Java对象,表,映射文件.
    过程可以是从Java对象到表和映射文件.
    还可以是从表到Java对象和映射文件.
    Hibernate 和OO思想都推荐使用前者的顺序,所以,我们在OA开发的过程中,也是用前者的过程.并利用Hibernate的属性,自动生成表.

    3,  分析功能的流程
    开发中经常使用的就是用例驱动开发的过程. 把每个用例实现了,系统也开发完了.
        1,整体。2,具体(部分)

    二、  
    1,  准备编码: 创建Action,与Service接口、实现类(空)。
                 完成Action中的方法声明与返回 值。(DispatchAction)
    这个OA的Action用的不是Action.因为,为了减少struts的配置和 Action类的数量,在这个项目中使用了, DispatchAction.这样可以减少配置量和Action类的数量.不过,这 个类也有缺点,就是只能配置一个ActionForm.所以,在做简单验证的时候,得特别处理.

    2,  完成Action 的方法,确定出所用的Service方法,在Service接口中声明他,并写好注释。
        1,获取参数
        2,调用业务方法
        3,返回一个显示
    3,  完成Service的方法 实现,实现要求的功能。确定出Dao中的方法,在Dao接口中声明他,并写好注释。
    4,  完成Dao的方法的实现。
    (为某些Service与Dao写单测试)

    三、  
    1,  写页面(Jsp,把静态页面改为动态页面)。这个能力是必须的.在工 作中就是经常有美工给你提供静态页面,由我们程序员改成动态页面.要注意各个资源文件的路径引用问题.在修改之前不要忘了先备份一份,并好好看一遍代码. 有助于我们提高修改速度和质量.
    2,  写配置
    要 注意DispatchAction的配置文件和Action的配置文件的区别.不要往了加上parameter属性.并且这样要把验证属性配置 成false.我们手工验证.来解决DispatchAction不能配置多个ActionForm的问题.
    3,  测试运行
    要及时的写好JUnit的单元测试,有助于我们及时 发现错误.提高速度.特别是在重要的方法和类上要必须写好单元测试.这个在大的软件公司中都是明确规定的.我们要养成良好的习惯.
    添加与修改页面 我们使用了同一个页面:
    这个我们用到了一个判断.可以让我们提高代码的服用录.
    <html:hidden property="method" value="${param.id eq null ? 'add' : 'edit'}"/>  
    用这句来判断是什么页面.通过对保持和更新的分析.我们发现,他 们一个有id一个没有Id所以我们用这个来判断他们.
    commons.jspf
    我们将所有的页面引用,写到一个公共的页面中.这样方便管 理引用.集中管理.也方便页面中的使用,减少了重复的代码.
    这里里用到的扩展名是jspf.原来没有接触过,不是jsp.为什么.因为,我们这里 区分,明确告诉使用者,这个是jsp代码片段.只能用来引用,而不能直接访问.
    使用两层(合并Service与Dao)
    在这个项目中没有 使用严格的三层结构.而将合并Service层与Dao层合并了.这个一是减少重复的样板代码.这几个模块的业务逻辑并不是很复杂,所以三层会产生很多样 板代码.二是,这个是第一个项目,减少复杂度.提高核心代码的练习质量.
    包的应用
    在开发这个项目的时候,我犯了一个错误.当务我很长时 间.不过也我深刻的记住了.这都是经验的积累.就是在包的引用是没有将包拷贝到lib目录下,而是引进去的.这样一回地方就不能使用了.
    展开全文
  • 管理岗位的面试

    2020-04-13 10:48:55
    3、在公司快速成长,新人较多,频繁出现交付延期,出品粗糙的情况下,通过搭建测试质量体系和测试项目全生命周期管理标准流程,明确各阶段各岗位职责及输出约束,同时配合 监控、分析、持续优化过程来保证产出。...
  • 数据库管理岗位职责

    万次阅读 2012-08-15 11:20:22
    数据库管理岗位职责 目标、目的职责分类(一)职责分类(二)确保数据库安全、稳定运行1.数据库日常运行维护和管理1.1每日数据库健康巡检。1.2数据库性能趋势分析,重点性能指标统计。1.3数据库重要SQL变化情况...
  • 岗位(职位)管理模块...岗位管理在企业应用中是一个普遍应用的模块,也属于其他业务应用的基础,特别是在业务流程的流转过程中经常会用到。合理的组织与规划组织机构下的岗位,对后期的管理可以起到事半功倍的效果。
  • 岗位(职位)管理模块...岗位管理在企业应用中是一个普遍应用的模块,也属于其他业务应用的基础,特别是在业务流程的流转过程中经常会用到。合理的组织与规划组织机构下的岗位,对后期的管理可以起到事半功倍的效果。
  • 新增岗位管理-WinForm部分    岗位(职位)管理模块主要是针对组织机构的岗位(职位)进行管理,包括:增加、修改、删除、移动、对岗位设置用户,设置岗位的权限等。岗位管理在企业应用中是一个普遍应用的模块,...
  • 新增岗位管理-Web部分    岗位(职位)管理模块主要是针对组织机构的岗位(职位)进行管理,包括:增加、修改、删除、移动、对岗位设置用户,设置岗位的权限等。岗位管理在企业应用中是一个普遍应用的模块,也...
  • 岗位(职位)管理模块主要是针对组织机构的岗位(职位)进行管理,...岗位管理在企业应用中是一个普遍应用的模块,也属于其他业务应用的基础。合理的组织与规划组织机构下的岗位,对后期的管理可以起到事半功倍的效果。
  • 岗位(职位)管理模块主要是...岗位管理在企业应用中是一个普遍应用的模块,也属于其他业务应用的基础。合理的组织与规划组织机构下的岗位,对后期的管理可以起到事半功倍的效果。登录系统后,选择“岗位管理”可...
  • 摘要 在这个信息时代,随着网络...采用信息管理的系统的方式,可以使得管理的工作更加的程序化,规范化与系统化,这样可以大大的提高了人员信息管理的效率。与此同时,随着计算机技术的不断发展和网络技术的不...
  • 我们这里注重实现功能,对页面不进行布局。 一、分析增删改查的功能:   添加、修改、删除成功后 要重定向到列表功能,这样在刷新页面时才不会出现“又做一次增、删、改”的操作。列表与删除功能都是只有一个请求...
  • 员工信息管理模块 员工基本信息模块具有员工信息输入、员工增删、员工信息查询三个功能,员工基本信息包括员工号、员工姓名、员工性别、所在部门、所在岗位、工龄和工资等级等信息。员工增删实现了对数据库中员工...
  • 今天是OA的第二天.我还在第一天代码的巧妙设计的兴奋中呢.第二天就开始了.呵呵,说实话,传智播客的代码质量真的很不错....这个模块分了三个小的功能模块,分别是部门、岗位、员工一、1,了解需求,这个
  • 互联网技术岗位详解,涉及到前段开发、后端开发、移动端开发、大数据、项目管理、测试、运维、技术管理等八大领域。架构师每个产品线都有架构师,在技术平台部门也需要技术平台的架构师。架构师负责设计系统整体架构...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,725
精华内容 9,890
关键字:

岗位管理界面