Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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 SpringMVC:在另一个控制器中自动连接控制器_Java_Spring_Spring Mvc - Fatal编程技术网

Java SpringMVC:在另一个控制器中自动连接控制器

Java SpringMVC:在另一个控制器中自动连接控制器,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有两个控制器LoginViewController和UserViewControlleras @Controller public class LoginViewController { @Autowired private UserViewController userViewController; //Can't autowire, since spring creates a proxy for UserViewController class @Reque

我有两个控制器
LoginViewController
UserViewController
as

@Controller
public class LoginViewController {

    @Autowired
    private UserViewController userViewController;  //Can't autowire, since spring creates a proxy for UserViewController class

    @RequestMapping(value="/login", method=POST)
    public String login(){

        //username and password checking etc

        if(login_successfull){
            //When login successfull, i need to redirect the screen to user dashboard  
            model.addAttribute("loginMessage", "You are loggined successfully")
            return userViewController.viewDashboard(userId);
        }   
    }
}

@Controller
@RequestMapping("/user")
public class UserViewController {

    @Autowired 
    private UserService userService;

    @RequestMapping(value="/dashboard", method=GET)
    public String viewDashboard(Model model, @RequestParam(value="id", required=true) Long userId){
        //Fetch and send user details to dashboard
        model.addAttribute("user", userService.get(userId));
        return "userDashboard"; 
    }
}
用户成功登录后,我需要将屏幕重定向到带有登录成功消息的用户仪表板

为此,可以使用两种方法

  • 由于我有一种在
    UserViewController
    中加载用户仪表板的方法,我在
    LoginViewController
    中自动连接了
    UserViewController
    ,这导致了
    NoSuchBeanDefinitionException
    ,因为spring为
    UserViewController
    创建了一个代理

  • 我可以使用
    redirect/forward
    作为返回
    “redirect:/user/dashboard?id=123”
    路由到用户仪表板。但是,当我更改
    viewDashboard()
    方法的url时,我需要识别并更正所有
    redirect/forward
    语句

  • 那么,有没有办法从
    LoginViewController
    调用
    UserViewController.viewDashboard()

    我正在使用spring 3.1.4和thymeleaf如果您希望控制器的输出将用户发送到另一个控制器,您可以执行“重定向”:

    if(login_successfull){
        //When login successfull, i need to redirect the screen to user dashboard  
        model.addAttribute("loginMessage", "You are loggined successfully")
        return "redirect:/user/dashboard";
    }
    
    如果您决定更改控制器的URL,则需要替换站点中的所有HTML链接。如果您已经在进行全局搜索/替换,那么您也应该能够找到重定向实例

    或者,您可以尝试以下方法:

    public class UrlConstants {
        public static final String USER_PATH = "/user";
        public static final String DASHBOARD_PATH = "/dashboard";
    }
    
    然后更改控制器:

    @Controller
    @RequestMapping(UrlConstants.USER_PATH)
    public class UserViewController {
        ...
        @RequestMapping(value=UrlConstants.DASHBOARD_PATH, method=GET)
    
    然后对于重定向:

    return "redirect:" + UrlConstants.USER_PATH + UrlConstants.DASHBOARD_PATH;
    

    如果希望控制器的输出将用户发送到另一个控制器,可以执行“重定向”:

    if(login_successfull){
        //When login successfull, i need to redirect the screen to user dashboard  
        model.addAttribute("loginMessage", "You are loggined successfully")
        return "redirect:/user/dashboard";
    }
    
    如果您决定更改控制器的URL,则需要替换站点中的所有HTML链接。如果您已经在进行全局搜索/替换,那么您也应该能够找到重定向实例

    或者,您可以尝试以下方法:

    public class UrlConstants {
        public static final String USER_PATH = "/user";
        public static final String DASHBOARD_PATH = "/dashboard";
    }
    
    然后更改控制器:

    @Controller
    @RequestMapping(UrlConstants.USER_PATH)
    public class UserViewController {
        ...
        @RequestMapping(value=UrlConstants.DASHBOARD_PATH, method=GET)
    
    然后对于重定向:

    return "redirect:" + UrlConstants.USER_PATH + UrlConstants.DASHBOARD_PATH;
    

    它在同一个包裹里吗?尝试创建新的构造函数并直接调用而不自动连接。它是否在同一个包中?尝试创建新的构造函数并直接调用,而无需自动连接。您也可以使用response.sendRedirect(“/user/dashboard”);要重定向到您的仪表板,显然您需要HttpServletResponse。@Jason我在问题本身中提到过使用
    redirect
    。我的问题是——当我更改控制器方法的请求映射url时,我必须找到并替换所有
    重定向
    语句,对吗?如果不在源代码中硬编码请求映射url,是否还有其他方法可以实现这一点?您也可以使用response.sendRedirect(“/user/dashboard”);要重定向到您的仪表板,显然您需要HttpServletResponse。@Jason我在问题本身中提到过使用
    redirect
    。我的问题是——当我更改控制器方法的请求映射url时,我必须找到并替换所有
    重定向
    语句,对吗?如果不在源代码中硬编码请求映射url,是否还有其他方法可以实现这一点?