我是JSF(2)的新手。
在Struts中,我们可以像 app.action
这样从一个URL调用一个动作。这将调用一个动作并返回一个结果页面,比如JSP(最初没有JSP/HTML)。
在JSF中如何做同样的事情呢?(我知道如何从一个 .xhtml 文件中调用一个动作)即:直接从 URL 调用一个托管的 bean 并得到一个结果页面。
我是JSF(2)的新手。
在Struts中,我们可以像 app.action
这样从一个URL调用一个动作。这将调用一个动作并返回一个结果页面,比如JSP(最初没有JSP/HTML)。
在JSF中如何做同样的事情呢?(我知道如何从一个 .xhtml 文件中调用一个动作)即:直接从 URL 调用一个托管的 bean 并得到一个结果页面。
@ManagedBean
@RequestScoped
public class Bean {
public Bean() {
// Here.
}
@PostConstruct
public void init(){
// Or here, certainly if you rely on injected dependencies like @EJB.
}
}
如果它正在控制请求/响应并可能重定向/导航到另一页,则在preRenderView
中执行该操作。
<f:event type="preRenderView" listener="#{bean.listener}" />
使用
public void listener() {
// ...
// You want to redirect?
externalContext.redirect(newURL);
// Or you want to navigate?
navigationHandler.handleNavigation(context, null, "newOutcome");
}
如果您想钩取所有请求,那么请使用过滤器:
@WebFilter("/*")
public class MyFilter implements Filter {
// ...
}
@Webfilter
,我认为AnilHoney可能在寻找一个@WebServlet
来处理特定的模式? - MennopreRenderViewEvent
用例。
话虽如此,JSF 是一个非常灵活的框架,很少有事情是固定的。通过一个复杂的插件和装饰器系统,许多 JSF 的行为可以被替换或添加。
对于这种用例,JSF 将 URL 绑定到(Facelets)视图的事实可以被覆盖,实际上你可以直接让 bean 对请求做出反应。尽管目的略有不同,但这基本上就是我为 JavaVDL 所做的,通过覆盖所谓的视图处理程序。
你必须自问这是否是你真正想做的事情,如果你想以这种方式工作,那么JSF是否是最好的选择。但是通过JavaVDL中概述的方法(源代码在此),你应该能够实现这一点。请注意,这种最后的方法不适合初学者,如果你想自己完成它,需要相当多的JSF经验。(如果你或其他人想要这种功能,请考虑在OmniFaces问题列表中创建一个问题)。