14.门户导航菜单功能实现

1.首先我们对需求进行分析。我们是需要在portal中显示数据,但是portal是通过调用item项目来获取到数据的,又item来调用dubbo。

 

这就涉及到了跨域请求。这里就需要引入新技术Jsonp了,Jsonp的原理是,一个项目可以访问另一个项目的JS文件,那么我们就把我们的数据伪装成JS文件,就实现了跨域请求。

2.我们现在来搭建ego-portal和ego-item项目,这里的步骤与搭建ego-manage相同,我们只需要改一下dubbo里面的扫描文件和配置里面的端口号就可以了。

3.我们首先在ego-portal里面来编写一个控制器。用来显示页面。

@Controller
public class PageController {
	@RequestMapping("/")
	public String welcome() {
		return "index";
	}
}

4.之后它的关于导航栏是通过调用ego-item来实现了。我们先完成item里面的代码。我们先完成pojo类,通过分析数据,我们知道应该建立如下的两个pojo。

public class PortalMenu {
	private List<Object> data;

	public List<Object> getData() {
		return data;
	}

	public void setData(List<Object> data) {
		this.data = data;
	}
	
}

public class PortalMenuNode {
	private String u;
	private String n;
	private List<Object> i;
	public String getU() {
		return u;
	}
	public void setU(String u) {
		this.u = u;
	}
	public String getN() {
		return n;
	}
	public void setN(String n) {
		this.n = n;
	}
	public List<Object> getI() {
		return i;
	}
	public void setI(List<Object> i) {
		this.i = i;
	}
	
}

 

5.然后我们写出service代码,我们首先可以查出所有的父菜单,然后通过父菜单递归的去查询每个子菜单,直到查询完毕。我们给出实现类的代码。

@Service
public class TbItemCatServiceImpl implements TbItemCatService {
	@Reference
	private TbItemCatDubboService tbItemCatDubboServiceImpl;
	@Override
	public PortalMenu showCatMenu() {
		// TODO Auto-generated method stub
		//查询出所有的一级菜单
		List<TbItemCat> list=tbItemCatDubboServiceImpl.show(0);
		PortalMenu pm=new PortalMenu();
		pm.setData(selAllMenu(list));
		return pm;
	}
	/**
	 * 返回所有菜单
	 */
	public List<Object> selAllMenu(List<TbItemCat> list){
		List<Object> listNode=new ArrayList<>();
		for (TbItemCat tbItemCat : list) {
			if(tbItemCat.getIsParent()) {
				PortalMenuNode pNode=new PortalMenuNode();
				pNode.setU("/products/"+tbItemCat.getId()+".html");
				pNode.setN("<ahref='/products/"+tbItemCat.getId()+".html'>"+tbItemCat.getName()+"</a>");
				pNode.setI(selAllMenu(tbItemCatDubboServiceImpl.show(tbItemCat.getId())));
				listNode.add(pNode);
			}else {
				listNode.add("/products/"+tbItemCat.getId()+".html|"+tbItemCat.getName());
			}
			
		}
		return listNode;
	}

 

6.之后我们需要完成控制器的代码,这里运用的就是前面说的Jspon技术,Java中对其进行了封装,方便了我们的使用:

@Controller
public class TbItemCatController {
	@Resource
	private TbItemCatService tbItemCatServiceImpl;
	@RequestMapping("rest/itemcat/all")
	@ResponseBody
	public MappingJacksonValue showMenu(String callback) {
		MappingJacksonValue mjv=new MappingJacksonValue(tbItemCatServiceImpl.showCatMenu());
		mjv.setJsonpFunction(callback);
		return mjv;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值