如何通过自定义范围视图传递参数并导航到Spring托管bean?

如何通过自定义范围视图传递参数并导航到Spring托管bean?,spring,jsf,view-scope,custom-scope,Spring,Jsf,View Scope,Custom Scope,我想先给你一些背景知识 上下文 我目前正在使用Spring framework开发一个web应用程序,我希望为用户提供在单独的选项卡中显示/编辑同一实体的不同实例的功能。为了显示和检索这些实体的属性,我将使用Spring托管bean和匹配的数据传输对象实例,并使用@Autowired注释的服务层实例接口实现来持久化数据 因为我经历过,Spring的会话范围bean不适合多选项卡编辑,请求范围bean不能“足够长时间”保存提交的数据以便重新显示,我实现了一个“自定义”范围视图bean。这对于显示和

我想先给你一些背景知识

上下文 我目前正在使用Spring framework开发一个web应用程序,我希望为用户提供在单独的选项卡中显示/编辑同一实体的不同实例的功能。为了显示和检索这些实体的属性,我将使用Spring托管bean和匹配的数据传输对象实例,并使用@Autowired注释的服务层实例接口实现来持久化数据

因为我经历过,Spring的会话范围bean不适合多选项卡编辑请求范围bean不能“足够长时间”保存提交的数据以便重新显示我实现了一个“自定义”范围视图bean。这对于显示和编辑多个相同类型的页面(以及页面上的实体)以及在bean的操作方法返回void/null时保存数据来说似乎很好

当前,页面之间的导航是通过bean操作方法上目标页面的字符串类型返回值来完成的,该bean操作方法发送给JSF或使用简单html链接解析的组件,如h:commandLink和h:commandButton

问题 如何使用一个h:link/h:按钮导航到另一个页面,并在页面登录后将参数传递给Spring view范围bean显示?

有没有一种方法,首先如何重定向到另一个页面?例如,从包含系统用户列表的页面,然后显示从启动页面传递的用户的详细信息

需要回答的问题和可能的解决方案? 如果我理解并正确实现了它,那么它们已经被Spring管理和注入,因此它们不能完全像JSF的ViewScoped bean那样工作,因此我无法轻松地使用它们的属性(注释为JSF managed)并在导航到细节/编辑页面后将参数值传递给它们,以便在该页面上显示它们。当我尝试它时,它会导致“CDI@ViewScoped bean功能不可用”错误消息。我认为,出于同样的原因,在目标页面上使用@ManagedBean注释的JSFbean及其f:viewParam也不起作用对吗?

我曾尝试将参数传递给Spring view作用域bean的函数,返回值为目标页面,但显然(?)bean在参数为空的情况下登陆后被重新创建。尝试使用void返回类型和登录页名称为Spring视图范围bean的操作定义导航规则也不起作用。似乎在faces-config.xml中没有识别出Springbean是这样吗?

我是否应该使用一些寿命更长的Springbean方法来调用具有正确参数的视图范围的构造函数?但如何防止重定向后视图范围bean的重新创建?

从视图范围切换到会话范围可以解决我的问题,但这会导致糟糕的用户体验,正如我所看到的,并给出了我的应用程序如何处理同一用户的多个相同类型实例的选项卡

在我看来,视图范围的bean从url地址传递和检索安全参数可能不是最佳的安全实践。但我还在UI、服务层和url拦截中使用Spring安全角色,并在我的服务方法中使用AOP来检查检索数据的所有者是否会在url中使用某些数据标识符是唯一可行的解决方案?从安全角度看,这是比使用会话范围的bean更糟糕/更好的解决方案吗?

我欢迎并感谢您给我的每一个建议,因为这是我的第一个春季宠物项目,我正在学习中