3
回答
JFinal返回值区分移动端和web端。

问题是这样的,以前的web端使用了Freemarker处理页面,所有都是setAttr传值,现在要添加移动端的JSON接口,不想在写一套了,有啥好的解决办法?我的想法是在请求的参数上加参数,比如:t=mobile来区分返回值类型,然后在后台统一处理。不知是否有好的解决方案,求教

举报
echola
发帖于3年前 3回/466阅
共有3个答案 最后回答: 3年前

     做个全局拦截器,然后在 拦截器的 inv.invoke() 代码之后添加请求客户端类型的判断,如果是移动端,则再添加一句:inv.getController().renderJson(); 这样就会覆盖在 controller 中的 render 方法。

public void intercept(Invocation inv) {
  inv.invoke();
  if (isMobileClient()) 
    inv.getController().renderJson();
}

    判断客户端类型可以通过查看请求中的 agent 属性得知。

引用来自“JFinal”的评论

     做个全局拦截器,然后在 拦截器的 inv.invoke() 代码之后添加请求客户端类型的判断,如果是移动端,则再添加一句:inv.getController().renderJson(); 这样就会覆盖在 controller 中的 render 方法。

public void intercept(Invocation inv) {
  inv.invoke();
  if (isMobileClient()) 
    inv.getController().renderJson();
}

    判断客户端类型可以通过查看请求中的 agent 属性得知。

能还给个isMobileClient()方法的代码?
--- 共有 3 条评论 ---
糊搞谢谢两位。。。 3年前 回复
JFinal回复 @lfy2008 : 大致是: inv.getController().getRequest().getHeader("agent"); 3年前 回复
echola ai.invoke(); String agent = ai.getController().getPara("agent"); if(StrKit.notBlank(agent)&&agent.equals("mobile")){ ai.getController().renderJson(); } 3年前 回复

引用来自“JFinal”的评论

     做个全局拦截器,然后在 拦截器的 inv.invoke() 代码之后添加请求客户端类型的判断,如果是移动端,则再添加一句:inv.getController().renderJson(); 这样就会覆盖在 controller 中的 render 方法。

public void intercept(Invocation inv) {
  inv.invoke();
  if (isMobileClient()) 
    inv.getController().renderJson();
}

    判断客户端类型可以通过查看请求中的 agent 属性得知。

再问个其它问题,我在用EasyUI时,经常要用到Ajax调用。后台要判断是否是Ajax,在出错时返回Json类型错误信息。这个Ajax判断我抄了网上的代码,但调试时发现,根本没有通常的Ajax信息,于是判断无效。

请问有什么其它方法么?

--- 共有 3 条评论 ---
broccoli0如果是ajax的话多传个参数呗 2年前 回复
糊搞OK 3年前 回复
JFinal问题不是很清楚,重起发起个问答,描述得更详细一些,最好是贴出相当代码 3年前 回复
顶部