• 开发Portlet第二步:如何将Crystal静态Portlet转变成基于测试数据的动态Portlet?


    当基于Crystal的静态Portlet开发完成后,在与后台服务联调前,还需要将Portlet转换成基于测试数据的动态Portlet。具体步骤如下:

    分步指南

    1. 复制Portlet项目,并修改相关的pom.xml、src/main/webapp/WEB-INF/liferay-plugin-package.xml、src/main/webapp/WEB-INF/liferay-plugin-package.properties文件中的Atifact-ID、module-id等信息,区别原静态Portlet项目,防止两个项目重复,导致不能在一个环境中运行;
    2. 修改src/main/webapp/WEB-INF/portlet.xml、src/main/webapp/WEB-INF/liferay-portlet.xml、/static-development-portlet/src/main/webapp/WEB-INF/liferay-display.xml中的portlet-name等信息,区别原项目的portlet-name信息,防止与原静态portlet不能在一个环境中运行;
    3. 修改src/main/webapp/WEB-INF/spring下****-portlet.xml文件名,保持****部分与相应portlet-name性息(去除横杠)一致;
    4. 查看****-portlet.xml文件中定义的包路径是否是项目所需,否则修改;
    5. 查看src/main/java下的包路径是否跟****-portlet.xml文件中定义的包路径一致,否则修改;

    创建测试数据项目:

    1. 创建Java Maven项目****-service-stub,结构如下:
    2. 修改pom.xml文件,添加远程服务api包依赖:
    3. 根据api实现相关服务的实现类,但方法内部只需返回设计的测试数据即可,如下:

      @Service
      public class ApplicationManager implements ApplicationService {
          /* (non-Javadoc)
           * @see com.gsoft.portlet.uum.application.ApplicationService#list()
           */
          @Override
          public List<Application> list() {
              List<Application> list = new ArrayList<Application>();
              for(int i = 0; i < 20; i++){
                  Application app = new Application();
                  app.setId(new Long(i));
                  app.setName("Name " + i);
                  app.setCode("code " + i);
                  app.setUrl("http://localhsot/" + i);
                  app.setDisabled(i %3 == 0 ? true : false);
                  list.add(app);
              }
              return list;
          }
          /* (non-Javadoc)
           * @see com.gsoft.portlet.uum.application.ApplicationService#getById(java.lang.Long)
           */
          @Override
          public Application getById(Long id) {
              Application app = new Application();
              app.setId(10L);
              app.setName("Name 10");
              app.setCode("code 10");
              app.setUrl("http://localhsot/10");
              return app;
          }
      }

    修改静态Portlet项目为动态测试Portlet:

    1. 在Porltet项目中引入测试数据项目及远程服务接口;
    2. 修改src/main/java下相应Portlet类,调用远程api及测试数据服务,返回测试数据;

      @Controller
      public class ApplicationManagementPortlet extends AbstractCrystalPortlet {
       
          @Resource
          private AuthSystemService authSystemService;
          @RequestMapping
          public String view(Model model, RenderRequest request) {
              List<AuthSystemDto> result = authSystemService.finaAllAuthSystemList();
              request.setAttribute("result", result);
              return "view";
          }
          @RequestMapping(params = "action=add")
          public String view4add(Model model, @Param String rediract) {
              model.addAttribute("rediract", rediract);
              return "add";
          }
       
          @RequestMapping(params = "action=edit")
          public String view4edit(Model model, @RequestParam String rediract,@RequestParam Long id) {
              model.addAttribute("rediract", rediract);
              AuthSystemDto authSystemDto = authSystemService.findOne(id);
              model.addAttribute("system", authSystemDto);
              return "add";
          }  
       
          @RequestMapping(params = "action=del")
          public String delete(Model model, RenderRequest request, @RequestParam Long id) {
              authSystemService.deleteAuthSystem(id);
              return "pop_up_success";
          }
          @RequestMapping(params = "action=editState")
          public String editState(Model model, RenderRequest request, @RequestParam Long id,@RequestParam String state) {
              AuthSystemDto authSystemDto = new AuthSystemDto();
              authSystemDto.setId(id);
              if(StringUtils.equals(UserRepConstants.UserRepState.DISABLE, state)) {
                  authSystemDto.setState(UserRepConstants.UserRepState.ENABLE);
              } else {
                  authSystemDto.setState(UserRepConstants.UserRepState.DISABLE);
              }
              authSystemService.updateAuthSystemState(authSystemDto );
              return "pop_up_success";
          }  
       
          @RequestMapping(params = "action=save")
          public String save(Model model, @ModelAttribute("authSystem")AuthSystemDto authSystem, @RequestParam String rediract){
              if(StringUtils.isEmpty(authSystem.getState())) {
                  authSystem.setState("1");
              }
              if(authSystem.getId() == null) {
                  authSystemService.saveAuthSystem(authSystem);
              }else {
                  authSystemService.updateAuthSystem(authSystem);
              }
              model.addAttribute("rediract", rediract);
              return "pop_up_success";
          }
       
          @RequestMapping(params = "action=check")
          public ModelAndView checkDupCode(Model model, RenderRequest request, @RequestParam Long id,@RequestParam String code) throws JsonProcessingException {
              AuthSystemDto system = new AuthSystemDto();
              system.setCode(code);
              system.setId(id);
              Boolean exists = authSystemService.existsAuthSystemCode(system);
              Map<String, Object> result = new HashMap<String, Object>();
              result.put("success", Boolean.TRUE);
              result.put("data", exists);
              return ajax(result);
          }
      }
    3. 修改src/main/webapp/WEB-INF/jsp下相关jsp文件,增加标签,获取后台portlet类返回的数据,并依据原静态HTML代码格式,动态生成相应的代码。

    发布动态测试Portlet,并做相应调试。

  • 相关阅读:
    第九章:Elasticsearch集群优化及相关节点配置说明
    Linux115条常用命令
    第一章:引擎介绍
    第七章:JAVA引用ESWCF及部分方法说明
    第八章:SCRT搭建ES搜索引擎步骤
    第三章:ES分词简单说明
    第二章:ES索引说明
    疑难杂症:Java中Scanner连续获取int和String型发生错误.
    java实现中缀表达式转后缀表达式
    编程题:输出字符集合的所有排列组合。
  • 原文地址:https://www.cnblogs.com/jytx/p/5466813.html
Copyright © 2020-2023  润新知