Передача параметров в сообщения из пакета ресурсов другим компонентам, кроме ** h: outputFormat ** - PullRequest
10 голосов
/ 18 апреля 2011

Существует ли удобный способ передачи параметров в сообщения из комплекта ресурсов другим компонентам, кроме h: outputFormat ?

Например, это допустимо:

<h:outputFormat value="#{myBundle['parametricMessage']}">
    <f:param value="#{myBundle['someParameterValue']}"/>
</h:outputFormat>

Но мне это нужно для кнопки, вот так (которая не будет работать):

<h:commandButton value="#{myBundle['parametricMessage']}">
    <f:param value="#{myBundle['someParameterValue']}"/>
</h:commandButton>

Конечно, я могу использовать ссылку вместо кнопки, и я могу сделать это черезсвойство в управляемом компоненте, но в этом вопросе я ищу удобный способ использования кнопки ...

Я использую RichFaces 3.3.3, JSF2, facelets.

Ответы [ 3 ]

13 голосов
/ 20 апреля 2011

Как насчет этого подхода?

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

public static String geti18nMsg(ResourceBundle bundle ,String msgKey, String paramValue ) {
    String  msgValue = bundle.getString(msgKey);
    MessageFormat   messageFormat = new MessageFormat(msgValue);
    Object[] args = {paramValue};
    return messageFormat.format(args);
}

Затем вызовите эту функцию, чтобы получить разрешенное сообщение в <h:commandButton>:

<h:commandButton value="#{f:geti18nMsg(myBundle , parametricMessage, someParameterValue)}"/>
4 голосов
/ 17 августа 2012

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

<h:commandButton>
    <h:outputFormat value="#{myBundle['parametricMessage']}">
        <f:param value="#{myBundle['someParameterValue']}"/>
    </h:outputFormat>
</h:commandButton>

Кстати, это делает то, что вы хотите, а также избегает необходимости писать код бина поддержки.

0 голосов
/ 20 апреля 2011

Ну, я не нашел хорошего ответа на этот вопрос, поэтому вопрос останется открытым.Хорошая практика, которую я обнаружил, заключается в том, чтобы иметь специальный класс, который представляет каждый пакет ресурсов (который имеет параметрическую структуру), и передавать все формирование сообщения и работать с контекстом там (например, получить локаль из FacesContext, получить ResourceBundle)., применить параметры и т. д.).И, наконец, предоставить доступ к синглтону такого класса обслуживания из вашего ManagedBean.

Это требует дополнительной работы, но решает проблему и стоит времени.

...