Получение данных с контроллера JSF в EJB [дубликат]

Наивный способ (уязвим для локального использования, упомянутый @jglouie):

  len (foo.split ('.') [1])  

, где foo - строка типа «23.512999238».

EDIT

Как отметил @Thomas Jung и @Mark Ransom, это довольно наивно для некоторых угловых случаев, которые должны быть обрабатывается как ...

  import re from locale import localeconv dec_pt = localeconv () ['decimal_point'] decrgx = re.compile ("\ d + (% s \ d +)? e (-  | \ +) (\ d +) "% dec_pt), если decrgx.search (foo): # все еще выясняет, что это повышает значение NotImplementedError,« нотация не реализована »else: digits = len (foo.split (dec_pt) [- 1]  )  
3
задан Buddhika Ariyaratne 28 June 2013 в 03:06
поделиться

1 ответ

Нет, это невозможно. Функция @ManagedProperty работает только внутри классов @ManagedBean (только с JSF-управляемыми компонентами). Вы можете использовать только @EJB или @Inject, чтобы ввести другой EJB или управляемый CDI компонент (класс @Named).

Тем не менее, конструктивно не имеет смысла вводить внешний класс, например, JSF или управляемый CDI компонент в классе бизнес-услуг, например EJB. EJB должен быть сконструирован таким образом, чтобы без изменений можно было повторно использовать совершенно другой интерфейс, например, веб-сервис JAX-RS или даже простой ванильный сервлет. EJB не должен иметь никаких javax.faces.* импорта / зависимостей (например, он не должен иметь никаких javax.ws.rs.* или javax.servlet.*).

Если вы собираетесь передавать данные из управляемого компонента JSF к EJB, то просто передайте его как аргумент метода. Такие данные обычно присущи JPA @Entity или по меньшей мере ключевому слову ID /, который возвращает объект.

10
ответ дан BalusC 17 August 2018 в 09:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: