Параметры JSF-пакета в javascript? - PullRequest
1 голос
/ 07 апреля 2011

У меня есть командная кнопка, которая генерирует всплывающее окно подтверждения. Текст подтверждения взят из пакета сообщений. Можно ли передать параметры для подтверждения?

Вот что я пытаюсь:

<h:commandButton value="#{tkmsg.addAccount}" action="#{ebfAccountControllerBean.specifyEbfAddAccount}" 
                        onclick="return confirm('#{tkmsg.confirmAddAccount}');">
            <f:param value="this account"/>
            <f:param value="this email"/>
</h:commandButton>

Но это не работает. Я просто получаю

Are you sure you want to add account {0} with email {1}?

Параметры работают только с OutputText или OutputFormat? Есть ли другой способ сделать это? Следующим моим шагом было бы заменить «этот аккаунт» данными из формы.

Ответы [ 2 ]

3 голосов
/ 07 апреля 2011

Арджан привел хороший пример. Альтернатива - написать функцию JS для этого самостоятельно. Вот основной пример запуска, который расширяет прототип JS String новой функцией format().

<script>
    String.prototype.format = function() {
        var args = arguments;

        return this.replace(/\{(\d+)\}/g, function() {
            return args[arguments[1]];
        });
    }
</script>

Используйте его следующим образом:

onclick="return confirm('#{tkmsg.confirmAddAccount}'.format('this account', 'this email'));"
3 голосов
/ 07 апреля 2011

То, что вы делаете, действительно не работает таким образом.JSF не может связать теги f:param с этим выражением EL.Подумайте об этом, даже человек не сможет догадаться об этом;)

Вы можете сделать ваше сообщение заранее в нечто доступное через EL, используя, например, буфер Tomahawks:

<t:buffer into="#{buffer['confirm']}">
   <h:outputFormat value="#{tkmsg.confirmAddAccount}">
      <f:param value="this account"/>
      <f:param value="this email"/>
   </h:outputFormat>
</t:buffer>

#{buffer} - это просто hasmap, объявленный как управляемый компонент с областью запроса.После этого вы можете ссылаться на #{buffer['confirm']} в выражении javascript.

...