Как получить значение пакета ресурсов на основе значений, полученных от управляемого компонента?

Я ищу возможность, если я могу получить значения resourcbundle на основе значений, полученных от управляемого компонента. Это может быть полезно в datatable, datagrid, а также с другими компонентами, где отображаются значения.

Я пробовал с этим кодом:

<h:outputText value="#{resourceBundle['myBean.myMsg']}" />

Но это не сработало. Мой outputText не смог получить значение из пакета ресурсов. Результат был таким:

???myBean.myMsg

person Kush Sahu    schedule 06.03.2013    source источник


Ответы (2)


Если вы получаете ???myBean.myMsg, это означает, что ему не удалось найти строку myBean.myMsg в вашем файле ресурсов...

Я думаю, вы хотите использовать ключ внутри myBean.myMsg (а не строку myBean.myMsg)?

В этом случае просто удалите '' вокруг него.

<h:outputText value="#{resourceBundle[myBean.myMsg]}" />

В противном случае он будет использоваться как строка, а не как выражение EL.

person Daniel    schedule 06.03.2013
comment
Спасибо за ваш быстрый ответ. После удаления '' это сработало. :) - person Kush Sahu; 06.03.2013

Вам нужно либо объявить свой пакет в faces-config.xml, если вы хотите иметь доступ к нему во всех представлениях, например:

<application>
    <resource-bundle>
        <base-name>path-to-your-resource-bundle</base-name>
        <var>bundle</var>
    </resource-bundle>
</application>

чтобы он был доступен для просмотра с

<h:outputText value="#{bundle['myBean.myMessage']}" />

или загрузите его прямо в представление с помощью

<f:loadBundle basename="path-to-your-resource-bundle" var="bundle" />
<body>
    <h:outputText value="#{bundle['myBean.myMessage']}" />
</body>  

В любом случае, ваш пакет ресурсов должен содержать строку, содержащую пару имени и значения для вашего сообщения.

myBean.myMessage = This is my message

Также стоит отметить, что пакеты ресурсов должны быть размещены в папке src/main/resources вашего проекта. Итак, bundle.properties в указанной выше папке будет base-name из bundle.

Что касается использования:

  • Использовать строку из самого пакета сообщений: <h:outputText value="#{bundle['myBean.myMessage']}" />
  • Используйте свойство управляемого компонента, которое оценивает желаемую строку из пакета: <h:outputText value="#{bundle[myBean.myMessage]}" /> с

    @ManagedBean
    @...Scoped
    public class MyBean {
    
        private String myMeggase = "bundle.string";//getter + setter
    
    }
    
  • Сохраните значение в <ui:param>, что может быть полезно при создании шаблонов:

    <ui:param name="bndl" value="#{myBean.myMessage}"/>
    <h:outputText value="#{bundle[bndl]}" />
    

    с тем же управляемым компонентом.

person skuntsel    schedule 06.03.2013