当前位置: 首页 > 知识库问答 >
问题:

Spring MVC:在另一个控制器中自动装配控制器

宋建本
2023-03-14

我有两个控制器< code>LoginViewController和< code>UserViewController

@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"; 
    }
}

用户成功登录后,我需要将屏幕重定向到用户仪表板,并显示登录成功消息。

为此,可以使用两种方法

> < li>

由于我有一个在< code>UserViewController中加载用户仪表板的方法,所以我在< code>LoginViewController中自动连接了< code>UserViewController,这导致了< code > nosuchbeandefionexception ,因为spring为< code>UserViewController创建了一个代理。

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

那么,有没有办法从登录视图控制器调用用户视图控制器.viewDashboard()?我正在使用Spring3.1.4和百里叶

共有1个答案

何灿
2023-03-14

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

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;
 类似资料:
  • 本文向大家介绍AngularJS控制器继承自另一控制器,包括了AngularJS控制器继承自另一控制器的使用技巧和注意事项,需要的朋友参考一下 AngularJS里控制器继承,常用的就是作用域嵌套作用域。默认情况下,当前作用域中无法找到某个属性时,就会在父级作用域中进行查找,若找不到直至查找到$rootScope。 但有些情况下,rootScope下就是我们的controller,不可能将大量的公

  • 我有一个名为ReportController的控制器,它可以成功地访问存储库中的数据。我在另一个处理WebSocket消息的类中自动连接了该类,因为我还想在数据库之间发送WebSocket消息。然而,问题是,当我在SocketHandler类中自动连接控制器类并从那里调用方法时,它会给出一个空指针异常。我已经用@组件或@服务注释了控制器,但没有成功。我的课程如下 我的控制器类 和我的套接字处理程序

  • 我有两个控制器和。我正在读一本书的内容。来自的txt文件,我希望将该文本放置在的文本区域中。代码在中运行并读取良好,但当打开中的窗口时,从中读取的内容。文本内容在文本区域中不可见。我的显示String mine包含内容,但它不显示在的文本区域中。请帮助任何人。非常感谢。 FXMLDocumentController代码 在中,有一个我删除了和,这样代码就可以工作了。

  • 问题内容: 我想从另一个控制器的函数中加载一个控制器,因为我集成到项目中的库我不想将其加载到控制器中,因为我想保持它的清洁和相关性。 我有默认的控制器,所以我可以加载,这样我怎么能从main函数访问控制器,所以我不必将控制器放在url中。 如果我可以从主控制器功能中加载控制器功能,我仍然愿意使用HMVC。 问题答案: 您无法从CI中的控制器加载控制器-除非您使用HMVC或其他工具。 您应该考虑一下

  • 问题内容: 我是Angular的新手,正在尝试弄清楚该怎么做… 使用AngularJS,如何注入要在另一个控制器中使用的控制器? 我有以下片段: 执行此操作时,出现错误: 我是否应该尝试在另一个控制器内部使用一个控制器,还是应该将此服务用作服务? 问题答案: 如果您打算掌握已经实例化的另一个组件的控制器,并且如果您遵循的是基于组件/指令的方法,则始终可以遵循某个层次结构的另一个组件中的控制器(一个

  • 问题内容: 使用SceneBuilder。我有2个阶段,每个阶段都有一个控制器: , 。 Stage1Controller: Stage2Controller: 这是使用2种方法 (称为in 方法)将这两个fxml文件加载到Main.java类中的方式: 该方法在第一阶段中用作方法,它在两个阶段都转换视图。 如何输入方法?谢谢 问题答案: “快速又脏”的方法是给的引用: 现在在您的主应用程序中: