В настоящее время я просто изучаю JSF 2 в стеке Java EE 6.
Я нахожу довольно много ограничений в JSF, и использование ManagedBeans очень нелогично / странно:
Похоже, что для выполнения события действия необходимо использовать тег <h:commandLink>
.Это все хорошо, если бы я, например, опубликовал данные формы.Однако в этом случае все, что я хотел сделать, это просто просмотреть книгу с помощью URL, например: viewBook?id=2
.Если бы я использовал пружину, это было бы легко:
@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>
и поддерживающий компонент:
@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, которая обеспечивает то, что делает пружина MVC?
Другой вопрос: Что обеспечивает JSF, что не может быть легкодостигается с помощью Spring?
На мой взгляд, вся технология JSF / Facelet и т. д. является чрезмерно сложной, чрезмерно сложной и нелогичной.Я придерживаюсь того же представления о EJB между прочим.
Эти представления формируются после изучения Java EE 6 путем написания небольшого веб-приложения на Java EE.