JSF2可以在没有框架的情况下使用bean作为基于请求的控制器吗?

JSF2可以在没有框架的情况下使用bean作为基于请求的控制器吗?,jsf,controller,Jsf,Controller,我正在为一个小组项目开发一个使用Java服务器Faces的web应用程序。我们中的大多数人都有在PHP中使用基于请求的框架的经验,我们在进入JSF开发的基于事件的思维模式时遇到了问题 在PHP中,通常会有一个前端控制器,如FacesServlet,它将请求发送到与FacesServlet不同的其他控制器。关键是您可以完全控制来自控制器的请求。JSF中似乎缺少这种控制,因为bean基本上只是业务逻辑,在访问URL时不一定运行,即通过输入.xhtml文件的URL,它将在没有任何bean参与的情况下加

我正在为一个小组项目开发一个使用Java服务器Faces的web应用程序。我们中的大多数人都有在PHP中使用基于请求的框架的经验,我们在进入JSF开发的基于事件的思维模式时遇到了问题

在PHP中,通常会有一个前端控制器,如FacesServlet,它将请求发送到与FacesServlet不同的其他控制器。关键是您可以完全控制来自控制器的请求。JSF中似乎缺少这种控制,因为bean基本上只是业务逻辑,在访问URL时不一定运行,即通过输入.xhtml文件的URL,它将在没有任何bean参与的情况下加载

我的问题是,是否有一种方法可以让所有请求都由托管bean处理,而不使用我所理解的基于请求的框架,如Spring或Struts?这将使bean更像控制器,从而使我们能够以更熟悉的方式管理诸如身份验证/授权、重定向等事情

我希望这是有道理的。。无论如何,如果有人能帮助我们,我和我的团队将非常感激

致以最良好的祝愿, Erik

您可以使用它将请求参数设置为托管bean属性

@ManagedProperty(value="#{param.foo}")
private Long foo;
使用此选项,将123设置为foo

您可以使用来指示在构造bean并设置这些托管属性之后必须执行的方法

@PostConstruct
public void init() {
    someResult = doSomethingWith(foo);
}
如果您希望从XHTML页面的视图端内部控制这一点,那么可以使用

这将在视图的构造过程中基本上执行bean.setFoorequest.getParameterfoo。在这种情况下,您不需要这些注释,但将无法使用@PostConstruct功能

另见:
JSF已经可以做到这一点了,但我无法理解您的误解,能否请您进一步阐述一下功能需求?您只是想在GET请求上调用bean操作吗?当然!如果可以实现URL方案,使URL与托管bean中的方法相匹配,从而选择要加载的视图,我真的很想这样做。这将禁止对查看文件的任何直接访问,这意味着您可以在托管bean中拥有授权逻辑,而不是像我们现在所做的那样使用ServletFilter。这能把事情弄清楚吗?如果这是JSF本机所做的事情,您知道有哪些资源可以让您了解它吗?请注意,您描述的将URL直接映射到action方法的内容表明,您更需要REST Web服务,而不是UI网站。JSF是一个以UI为中心的基于组件的MVC框架,而不是REST框架。使用正确的工具完成工作,或者反过来。谢谢你的回复!然而,问题仍然是如何实际将URL与bean匹配,即如何向page.jsf发出任何请求,实际上构建PageBean或任何可能调用的内容。只需通过{bean.foo}以通常的方式将bean绑定到视图中的某个位置。JSF将相应地创建和准备bean,这实际上非常有用,但是这仍然意味着视图决定调用哪个bean。问题是,是否可以先调用bean,然后由它来决定视图,而不是相反?虽然我刚刚看到你对这个问题的评论,我想你是对的。问题是组分配需要我们在JSF中完成,所以我很好奇您是否可以修改它的行为。抱歉造成混淆。请使用动态页面包含。例如。
<f:metadata>
    <f:viewParam name="foo" value="#{bean.foo}" />
</f:metadata>