Как получить значение свойства пакета ресурсов JSF в компоненте поддержки? - PullRequest
10 голосов
/ 24 февраля 2012

Я использую JSF 2. Я пытаюсь динамически разрешить ссылку на пакет сообщений в свойстве управляемого компонента. Значение содержит имя пакета, а также ключ. Это необходимо, поскольку значение может быть получено из одного из нескольких разных пакетов. Я перепробовал много перестановок, но значение из bean-компонента, кажется, всегда разрешается как буквенная строка (вывод в скобках EL), и пакет никогда не вызывается для разрешения и возврата значения. Есть идеи?

Я пробовал:

#{bundle['key']}
${bundle['key']}
bundle['key']

Они выводятся в точности как есть, также в <h:outputText>. Это работает нормально, если я напишу это прямо на странице. Моя теория заключается в том, что JSF не осознает, что он должен обрабатывать строку как выражение. Есть ли способ заставить его?

Ответы [ 2 ]

18 голосов
/ 24 февраля 2012

EL будет разрешен только в представлении, а не в модели.В противном случае это была бы огромная дыра для атаки с помощью инъекции EL, которая позволяет конечным пользователям вводить произвольные выражения EL в поля ввода и разрешать их.Нет, вы не можете заставить это каким-либо образом.

Вы должны решить это самостоятельно.Вы можете сделать это либо программно, используя Application#evaluateExpressionGet():

FacesContext context = FacesContext.getCurrentInstance();
String value = context.getApplication().evaluateExpressionGet(context, "#{bundle['key']}", String.class);
// ...

, либо, в данном конкретном случае, просто используя API ResourceBundleпрямо как JSF делает под прикрытием:

ResourceBundle bundle = ResourceBundle.getBundle(basename, FacesContext.getCurrentInstance().getViewRoot().getLocale());
String value = bundle.getString("key");
// ...
1 голос
/ 19 марта 2015

Попробуйте это ..

Resource Bundle, на который ссылается msg

USD=$

HTML-код:

<c:set var="key" value="#{managedBean.currencyCode}" />
<h:outputText value="#{msg[key]}"/>

Это должно работать ..

...