NutzCN Logo
问答 自定义视图解决pc或mobile跳转
发布于 2450天前 作者 qq_1d84c364 1303 次浏览 复制 上一个帖子 下一个帖子
标签:

打算在返回view的时候通过request判断是pc端还是移动端访问,返回不同的jsp,我不想在每个入口方法中都写一遍这样的判断然后返回不同的view。
前面是我的需求,我有个PCMobileViewMaker继承的ViewMaker(pcmobile:index.index),在make方法中动态的改变index.index为pc.index.index或mobile.index.index,因为这个PCMobileViewMaker是在web容器启动的时候加载的,此刻没有HttpServletRequest对象,所以我无法判断是PC还是mobile,特来请教是否有其它优雅的方案

@Views({PcMobileViewMaker.class})
public class MainMoudle {
    @At("/hello")
    @Ok("pcmobile:index.index")
    public String hello() {
		return "hello";
    }
public class PcMobileViewMaker implements ViewMaker{
    public PcMobileViewMaker() {}
    public View make(Ioc ioc, String type, String value){
        if("pcmobile".equalsIgnoreCase(type)){
        	//此处无法获取用户的访问途径(web容器启动阶段没HttpServletRequest对象)
        	value = "pc." + value;
        	//value = "mobile." + value;
            return new JspView(value);
        }
        return null;
    }
}    

12 回复
Mvcs.getReq()

请问那里面有Mvcs

那是个类。。。 import就有了。。。

ViewMaker是启动是时候调用的,那时候没有请求对象

你需要实现一个View了

public class PcMobileViewMaker implements ViewMaker{
	public PcMobileViewMaker() {}
    public View make(Ioc ioc, String type, String value){
        if("pcmobile".equalsIgnoreCase(type)){
        	//此处没有无法获取用户的访问途径
        	HttpServletRequest request = Mvcs.getReq();
        	System.out.println("request:"+request);
        	value = "pc." + value;
        	//value = "mobile." + value;
            return new JspView(value);
        }
        return null;
    }
} 
输出:
request:null

ViewMaker是在服务器启动的时候加载的理论上request应该没有啊

我试过自己实现一个View,继承JspView,但是refer方法中如何更改视图啊

不继承哦,在render方法内判断

自定义一个View类,不继承其他类,然后构造方法是传入两个view对象,分别代表pc和移动端,然后在render内判断选用哪一个,然后调用该view的render

类似于代理两个view对象

public class PcMobileView{
	private String viewPath;
	public PcMobileView(String value) {
		this.viewPath =value;
	}

	public void render(HttpServletRequest req, HttpServletResponse resp, Object obj)  {
		//此处根据req判断请求途径
		viewPath = "pc." + viewPath;
		//判断完毕后如何跳转到viewPath对应的jsp
	}
	
} 
添加回复
请先登陆
回到顶部