【发布时间】:2015-07-14 06:21:06
【问题描述】:
我有一个 Spring-JSF 集成应用程序。使用 SpringBeanFacesELResolver 完成集成。我的 bean 类由 Spring 管理。现在,我希望以“Spring 方式”在 bean 中获取我的查询字符串参数值。 我能够以“JSF方式”获取查询字符串参数值,如下所示,我不想使用它,因为bean是由Spring管理的。
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("myParamName");
您能否建议 Spring 获取这些的方法?
从我的 xhtml 文件中,我调用 bean 中的方法如下
<h:commandLink action="#{myUserBean.onUserLoad}">
这是我的 bean 类的伪代码
@Component
@Scope("session")
public class MyUserBean {
@Autowired
private UserService userService;
public String onUserLoad() {
//get the request parameter value here
}
}
【问题讨论】:
-
您使用 JSF,那么您为什么想要它不同呢?这是正常的方式,独立于管理 bean 的内容。 JSF、CDI、Spring……
-
@Kukeltje,如果bean是由Spring管理的,如果我能用Spring完全管理就好了。
-
为什么会是好?您可能可以通过在 web.xml 中添加额外的过滤器来实现这一点(不确定这些过滤器是否存在于 spring 或必须自己编写)然后祈祷各种其他问题不会出现,或者只是使用这个......而且(现在我在开玩笑,但不完全是):如果你想走 Spring 的道路,为什么不放弃 JSF 并使用 Spring MVC?
-
“JSF 方式”顺便说一下
<f:viewParam>或@ManagedProperty。如您所示,手动访问请求参数映射更像是解决极端情况的方法。<f:viewParam>方法应该同样适用于由 3rd 方框架而不是标准 Java EE 管理的 bean。 -
然后,您始终可以将这些特定于 jsf 的调用包装在自定义实用程序类中,并在您切换 jsf 时在一个地方更改其实现。但是 BalusC 建议(这显然是正确的)如果切换……或者如果新的 mvc 不支持它,你必须在视图中做更多的工作,仍然增加你的 bean。
标签: spring jsf managed-bean http-request-parameters