Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 玩框架-将映射传递给同一控制器中的另一个公共静态方法_Java_Playframework - Fatal编程技术网

Java 玩框架-将映射传递给同一控制器中的另一个公共静态方法

Java 玩框架-将映射传递给同一控制器中的另一个公共静态方法,java,playframework,Java,Playframework,外部路由在控制器中命中此方法: public static void externalRouteHit() { Map<String, String> myParams = request.params.allSimple(); redirectedRoute(myParams); } publicstaticvoid externalRouteHit(){ Map myParams=request.params.allSimple(); 重定向路由(myParams);

外部路由在控制器中命中此方法:

public static void externalRouteHit() {
  Map<String, String> myParams = request.params.allSimple();
  redirectedRoute(myParams);
}
publicstaticvoid externalRouteHit(){
Map myParams=request.params.allSimple();
重定向路由(myParams);
}
然后,我尝试将映射传递给同一控制器中的另一个方法,但它为null

public static void redirectedRoute(Map<String, String> myParams) {
  if (myParams == null)
    Logger.info("WTF");

}
公共静态无效重定向路由(映射myParams){
if(myParams==null)
Logger.info(“WTF”);
}

我可以传递字符串或布尔值。我做错了什么?

这是因为重定向是真正的HTTP重定向(302),因此将生成从URL到操作名称的HTTP请求,并且将尝试将映射转换为URL的一部分


我猜从映射到映射的转换失败了

如果您想通过重定向传递请求参数,您可能只需要使用:params.flash(),它将所有参数存储在cookie中,并且它们将通过“flash”变量在被调用的控制器(和模板)中可用

对于Map,它应该可以工作,位于的文档详细说明:

Play还处理绑定地图的特殊情况 像这样:

公共静态无效显示(映射客户端){ …}

您可能需要检查request.params.allSimple()准确返回的类型,可能它需要一些特殊的映射实现。

根据,当播放操作处理映射参数时,它需要查询参数的特定格式:

Play还处理绑定地图的特殊情况 像这样:

公共静态无效显示(映射客户端){ … }

查询字符串如下所示:

?client.name=John和client.phone=111-1111和client.phone=222-2222

将客户端变量绑定到包含两个元素的映射。 第一个元素的键名和键值为John,第二个元素的键名和键值为John 带有按键电话和值111-1111、222-2222

换句话说,您必须使用特殊格式的命名查询参数。您想要的是传递所有查询参数

这里有一个有效的例子。这看起来很冗长,但它确实有效。尝试点击/application/externalRouteHit?color=red&size=XS

public class Application extends Controller {                                                               

    public static void externalRouteHit() {                                                                 
        Map<String, Object> myParams = new HashMap<String, Object>();                                       
        for (String key : params.allSimple().keySet()) {                                                    
            if (!key.equals("body")) {                                                                      
                myParams.put(key, params.allSimple().get(key));                                             
            }                                                                                               
        }                                                                                                   
        redirect(Router.reverse("Application.redirectedRoute", myParams).url);                              
    }                                                                                                       

    public static void redirectedRoute() {                                                                  
        renderText("color = " + params.get("color") + ", size = " + params.get("size"));                    
    }                                                                                                       
}                                                                                                           
公共类应用程序扩展控制器{
公共静态void externalRouteHit(){
Map myParams=new HashMap();
对于(字符串键:params.allSimple().keySet()){
如果(!key.equals(“body”){
put(key,params.allSimple().get(key));
}                                                                                               
}                                                                                                   
重定向(Router.reverse(“Application.redirectedRoute”,myParams.url);
}                                                                                                       
公共静态无效重定向路由(){
renderText(“color=“+params.get(“color”)+”,size=“+params.get(“size”)”);
}                                                                                                       
}                                                                                                           

如果您想在不创建重定向的情况下从一个控制器调用另一个公共静态void方法,则必须使用@Util对该方法进行注释

例如:

public class MyController extends Controller {


  public static void index(){
    Map xyz = ....;

    helperMethod(xyz);

  } 

  @Util
  public static void helperMethod(Map map){
    /// do stuff
  } 

}

myParams在
externalRouteHit()
内不为null?这是一个非常好的示例。如果解决方案有效,我将尝试使用+1!