JSF Ограничения - PullRequest
       7

JSF Ограничения

1 голос
/ 21 октября 2010

В настоящее время я просто изучаю 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.

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

Spring MVC - это основанная на запросах инфраструктура MVC.JSF - это основанная на компонентах инфраструктура MVC.В этом разница.Используйте один, если вы хотите MVC на основе запроса, и другой, если вы хотите MVC на основе компонента.

Видя эту «бессмысленную» конструкцию - в терминах JSF, - держу пари, что вы на самом деле таблицакниги в h:dataTable и пытаются получить текущую выбранную книгу.Если это действительно так, то вам вообще не нужно передавать параметры.Вместо этого используйте DataModel<Book>, чтобы отобразить книги в h:dataTable, избавьтесь от f:param и обновите ваш компонент следующим образом:

@ManagedBean
@ViewScoped
public class BookController {
    private DataModel<BookDTO> bookModel;
    private BookDTO book;

    public String viewBook() {
        book = bookModel.getRowData();   
        return "BookView";
    }

    // ...
}

Для примера CRUD в JSF 2.0 вы можете найти эта статья полезна.

1 голос
/ 21 октября 2010

Я думаю, что вам нужно посмотреть в JSF немного больше ...;) Чего вы хотите добиться, так это показать пользователю что-то на основе параметров, переданных в URL.

Это может быть достигнуто с помощью preRenderView Event JSF в вашем представлении.

 <f:metadata>
    <f:viewParam name="team" value="#{teamEditView.team}"/>
 </f:metadata>
 <f:event type="preRenderView" listener="#{teamEditView.setup}"/> 

Здесь вы можете иметь метод с именем «setup» в вашем управляемом компоненте, который будет вызываться, и все, что вы извлекаете данные из источника данных, может быть выполнено в этом методе на основе параметра, переданного в URL, который здесь соответствует команде

xxxx.faces?team=jsf

вы получите это значение в своем бобе, и вы можете запустить, как упоминалось ....

и о Java EE 6 и JSF 2, они давно созрели, пока вы не сделаете что-то в версиях до Java EE 6 и JSF, вам повезло, что вы начали с JSF 2, это огромное улучшение по сравнению с 1.2 и один раз ты привыкаешь к этому, он качается.

Кривая обучения немного, но где это не ......:)

Если вы любитель весны, попробуйте CDI:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...