【发布时间】:2010-10-21 07:02:46
【问题描述】:
我目前只是在 Java EE 6 堆栈中探索 JSF 2。
我发现 JSF 有很多限制,而且 ManagedBeans 的使用方式非常违反直觉/奇怪:
看来,为了执行一个动作事件,你必须使用<h:commandLink> 标签。例如,如果我是发布表单数据,那就太好了。但是在这种情况下,我想做的只是简单地使用 url 查看一本书,例如:viewBook?id=2。如果我使用的是 spring,那会很容易:
@Controller
public class BookController {
@RequestMapping("/viewBook")
public String viewBook(@RequestParam("id") Long id, Model model) {
// all the method params(id, model) are provided by spring
BookDTO book = bookService.load(id);
model.addAttribute("book", book);
return "BookView";
}
}
但是使用 JSF,我必须:
<h:form>
<h:commandLink value="#{bookController.viewBook}">
<f:param name="id" value="#{book.id}"/>
</h:commandLink>
</h:form>
和支持 bean:
@ManagedBean
public class BookController {
private BookDTO book;
public String viewBook() {
Long id = Long.parseLong(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterValueMap().get("id"));
book = bookService.load(id);
return "BookView";
}
// ...
}
问题是:有没有 JSF2 框架提供 Spring MVC 的功能?
另一个问题是: JSF 提供了哪些使用 Spring 无法轻松实现的功能?
在我看来,整个 JSF/Facelet 等技术过于复杂、过度设计和违反直觉。顺便说一句,我对 EJB 持有相同的观点。
这些视图是在探索 Java EE 6 之后通过编写一个小型 Java EE Web 应用程序形成的。
【问题讨论】:
标签: java spring spring-mvc jsf-2