2012-07-31 116 views
0

这似乎很容易,但我不知道为什么我会遇到这样的困难......所以在getURL中,我返回字符串“total”。我试图返回方法handleRequest中已有的SAME值“total”。建议?提前致谢!将变量的值从一种方法传递到另一种方法

public class Multiply implements Controller { 

    static int product; 
    private static String total; 

    public static String getURL(HttpServletRequest req) { 

     String scheme = req.getScheme();   // http 
     String serverName = req.getServerName(); // hostname.com 
     int serverPort = req.getServerPort();  // 80 
     String contextPath = req.getContextPath(); // /mywebapp 
     String servletPath = req.getServletPath(); // /servlet/MyServlet 
     String pathInfo = req.getPathInfo();  // /a/b;c=123 
     String queryString = req.getQueryString(); // d=789 

     String[] item = queryString.split("&"); 
     product = 1; 
     for (int i = 0; i < item.length; i++) { 
      String[] s = item[i].split("="); 

      String name = s[0]; 
      String value = s[1]; 
      int numValue = Integer.parseInt(value); 
      product = product * numValue; 

     } 
     total = "" + product; 
     return total; 

    } 

    public ModelAndView handleRequest(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 

     String Mess = total; 

     ModelAndView modelAndView = new ModelAndView("hello"); 
     modelAndView.addObject("message", Mess); 

     return modelAndView; 
    } 
} 
+0

丢失了一些东西。你在哪里调用getURL()? – kosa 2012-07-31 20:41:04

+0

我很困惑。你是否希望handleRequest中的字符串“total”等于你在getURL中返回的值?如果这是你需要设置的情况下,你只能初始化总数。 – Zoop 2012-07-31 20:42:19

+0

Zoop,你有它。我如何设置它? – 2012-07-31 20:48:43

回答

0

您在执行此操作时遇到许多问题。首先,通过声明total静态,此类的所有实例将具有相同的值total。如果您使用创建控制器并重用它的框架,这可能会导致问题,因为该类的所有实例都将引用并更新同一个成员字段。

你想要的是让你的getURL方法返回total的值,然后从你的handleRequest中调用它。 getURL可以是静态的,因为它不依赖非静态成员字段。您应该将getURL重新命名为getTotalgetTotalFromURL,因为这就是您要做的。您要求getURL要做的事实际上是side effect,应该避免这种做法。

public class Multiply implements Controller { 

    public static String getURLTotal(HttpServletRequest req) { 
     String scheme = req.getScheme();   // http 
     String serverName = req.getServerName(); // hostname.com 
     int serverPort = req.getServerPort();  // 80 
     String contextPath = req.getContextPath(); // /mywebapp 
     String servletPath = req.getServletPath(); // /servlet/MyServlet 
     String pathInfo = req.getPathInfo();  // /a/b;c=123 
     String queryString = req.getQueryString(); // d=789 

     String[] item = queryString.split("&"); 
     int product = 1; 
     for (int i = 0; i < item.length; i++) { 
      String[] s = item[i].split("="); 

      String name = s[0]; 
      String value = s[1]; 
      int numValue = Integer.parseInt(value); 
      product = product * numValue; 

     } 
     return Integer.toString(product); 
    } 

    public ModelAndView handleRequest(HttpServletRequest request, 
             HttpServletResponse response) 
       throws ServletException, IOException 
    { 
     String Mess = Multiply.getURLTotal(request); 

     ModelAndView modelAndView = new ModelAndView("hello"); 
     modelAndView.addObject("message", Mess); 

     return modelAndView; 
    } 
} 
+0

如何从handleRequest中调用它? – 2012-07-31 20:54:18

+0

@EdLee我已经更新了包含代码的答案。 – 2012-07-31 20:55:49

+0

保佑你的灵魂 – 2012-07-31 20:59:29

0

total是一个成员变量对类Multiply。从任一方法访问它都应该没有问题。请记住,它是未初始化的。因此,除非您在handleRequest之前致电getURL,否则total将不会被分配给任何String,并会给您一个错误。

另外,我会在几个领域看你的大小写。

编辑:只是澄清,你在技术上不是从一种方法传递值到另一种。您正在访问两个方法之间的共享成员变量。