如何传递参数并导航到具有自定义范围的Spring托管bean - 视图?

时间:2016-03-04 19:58:54

标签: spring jsf view-scope custom-scope

我想首先给你一些背景信息。

上下文

我目前正在使用Spring框架开发一个Web应用程序,我希望在单独的选项卡中为用户提供显示/编辑同一实体类型模型的不同实例。为了显示和检索这些实体的属性,我使用Spring托管bean 使用匹配的数据传输对象实例,使用@Autowired带注释的服务层实例接口实现来保存数据

因为我有经验, Spring的会话作用域bean 适合多标签编辑请求作用域bean无法保存提交的数据“足够长“for redisplay 我已经实现了”自定义“范围的视图bean 。只要bean的动作方法返回void / null,这似乎适用于显示和编辑多个相同类型的页面(及其上的实体)和保存数据。

目前页面之间的导航是通过bean操作方法上的目标页面的String类型返回值发送到组件,如h:commandLink和h:commandButton,由JSF或使用简单的html链接解析。

问题

如何使用一个h:link / h:按钮导航到另一个页面,并在页面着陆后通过Spring视图范围bean传递参数?

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

需要回答的问题和可能的解决方案?

如果我已正确理解并实现它,它们已经被管理并注入了Spring,因此它们无法像JSF的ViewScoped bean那样完全工作,所以我不能轻易地使用它们注释为JSF托管的属性并传递它们的参数值以便显示它们在导航到它之后的详细信息/编辑页面上。当我尝试它时,它会导致“CDI @ViewScoped bean功能不可用”错误消息。我认为,出于同样的原因,使用@ManagedBean注释的JSF bean并且目标页面上的f:viewParam不起作用。 这是正确的吗?

我已经尝试将参数传递给Spring视图scoped bean的函数,并返回目标页面的返回值,但很明显(?)bean在登陆后重新创建了它的参数已清空。尝试使用void返回类型和登录页面名称定义Spring视图范围bean的操作的导航规则也不起作用。似乎在faces-config.xml中无法识别Spring bean。 是这样吗?

我是否应该使用一些寿命较长的Spring bean方法来调用带有正确参数的视图作用域的构造函数?但是如何在重定向后阻止视图范围bean的重新创建?

从视图范围切换到会话范围将解决我的问题,但是当我看到并给出时,它将导致糟糕的用户体验,我的应用程序应如何与同一用户的相同类型实例的多个选项卡一起使用。 / p>

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

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

0 个答案:

没有答案