一、简述需求:
通过前端页面请求后端,后台获取页面按钮列表,通过编写统一注解,获取按钮列表传输到前端,前端遍历按钮列表
二、实现经过:
1.首先需要定义个注解接口
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * ToolBar生成 */ @Target({ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ToolBar { }
2.编写注解的主体
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.List; /** * toolBar菜单生成 */ @Order(0) @Aspect @Component public class ToolBarAspect { @Resource private MenuService menuService; @Around("@annotation(toolBar)") // 可以直接捕获下面这个方法中参数所设定的注解类型 public Object toolBarAspect(ProceedingJoinPoint joinPoint, ToolBar toolBar) throws Throwable { //这里做按钮列表的参数接收和到数据库获取按钮的列表的处理,可以根据实际情况编写 ***开始*** HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest(); Integer parentPathId = Integer.valueOf(request.getParameter("permId")); List<Menu> pathList = menuService.getSubMenu(parentPathId); //按钮列表 request.setAttribute("toolBarList", pathList); //按钮统一url request.setAttribute("formUrl", request.getServletPath()+"?permId="+parentPathId); //这里做按钮列表的参数接收和到数据库获取按钮的列表的处理,可以根据实际情况编写 ***结束*** return joinPoint.proceed(); } }
三、切片调用
直接通过
@ToolBar
注解进行调用,如:
四、前端调用
这边使用的是framemark模板进行遍历
<#list toolBarList as list> <div class="layui-inline" > <button id="${list.url}">${list.name}</button> </div> </#list>
注意:绑定按钮需要前端进行绑定编写
五、编写自定义注解
java编写自定义注解需要使用到元注解
元注解(meta-annotation):
元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
1.@Target,
2.@Retention,
3.@Documented,
4.@Inherited