Наивный способ (уязвим для локального использования, упомянутый @jglouie):
len (foo.split ('.') [1])
, где foo - строка типа «23.512999238».
Как отметил @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] )
Нет, это невозможно. Функция @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 /, который возвращает объект.