2012-03-26 5 views
1

Я использую пакеты интернационализации Seam 3 для реализации обмена сообщениями в своем приложении.Настройка интернационализации Seam3

Короче говоря, это то, что я делаю:

Импорт/инъекционных необходимых классов:

import org.jboss.seam.international.status.Messages; 
import javax.inject.Inject; 
@Inject 
private Messages messages; 

Когда возникает ошибка, я создаю сообщение в моем бэк-боба:

messages.error(new BundleKey("AppMsgResources", "errorMsgKey")).defaults("Error: Something bad happened!"); 

И наконец, я показываю сообщение на моей странице лиц так:

<h:messages /> 

Очень стандарт до сих пор я думаю, что ...

Обычай логика Я хочу осуществить это, чтобы иметь возможность сначала проверить таблицу базы данных (назовем эту таблицу MessageBundleOverride) для ключа соответствия сообщений. Если он существует, я хочу использовать значение из таблицы MessageBundleOverride, а не файл свойства. Если он не существует или пуст, я хочу использовать значение, найденное в файле свойств.

Я думаю, что есть способ Weld/CDI сделать это, где я могу реализовать интерфейс сообщений и зарегистрировать его с помощью шва так или иначе, чтобы он собирал реализацию моих сообщений во время «инъекции», а не по умолчанию, как реализация MessageImpl, которая поставляется с пакетом Seam Internationalization. Я немного новичок в Seam/Weld, поэтому не уверен, что это простая вещь.

любая помощь очень ценится, спасибо!

ответ

1

Разобрался один способ получить это сделано после прочтения Сварные документы: http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html#alternatives

@Alternative 
@RequestScoped 
public class MyMessages extends MessagesImpl { 

/* 
* Override a method that you want to customize or write new code here 
*/ 
@Override 
public Set<Message> getAll() { 
    Set<Message> allMessages = super.getAll(); 

    // do some custom logic here 
    applyOverrides(allMessages); 

    return allMessages; 
} 
... 
// override any other method as needed 
// You will probably have to override everything so it probably 
// wouldnt make sense to extend the existing implementation) 
... 
} 

В файле beans.xml, вам придется объявить этот новый класс в качестве альтернативы по умолчанию:

<beans xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
     http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 

    <alternatives> 
     <class>com.company.project.view.messages.MyMessages</class> 
    </alternatives> 
</beans> 

И что должно делать это так долго, как сварной шов подбирая классы в пакете вы имеете MyMessages, определенный в.

Смежные вопросы