...
Code Block |
---|
title | Creating messages with payload |
---|
borderStyle | solid |
---|
|
Message message = messageContext.message().text("Hello CODI").payload(MessageSeverity.Error.classERROR).create();
|
... creates a message with 'Hello CODI' as message descriptor and error as message-severity.
Payload is based on similar to the validation payload of Bean-Validation. Via payload it's possible to provide additional information via a typesafe mechanism. It's possible to use the provided types of payload ( MessageSeverity
or InternalMessage
) or to create custom payload like Label
or to create something like serializable attatchments. It's possible to handle messages depending on the payload of the message. By default a message is created with MessageSeverity.InfoINFO
.
Creating message text
Example 1
...
Code Block |
---|
title | Implementation of a custom message-builder |
---|
borderStyle | solid |
---|
|
public class CustomMessageBuilder extends SimpleMessageBuilder
{
private CustomMessageBuilder ()
{
}
public static MessageBuilder message()
{
return new CustomMessageBuilder();
}
public static MessageBuilder technicalMessage()
{
return new CustomMessageBuilder().payload(TechnicalMessage.classPAYLOAD);
}
public static MessageBuilder label()
{
return new CustomMessageBuilder().payload(Label.classPAYLOAD);
}
}
|
A custom MessageResolver
has to know how to handle the different message types. If a payload type just allows one possible value (as marker), we can use the class of the payload to check if the payload-map contains such a marker entry.
Code Block |
---|
title | Handling different message types |
---|
borderStyle | solid |
---|
|
public class TestMessageResolver implements MessageResolver
{
public String getMessage(String key, Locale locale, Map<Class, Class<? extends MessagePayload>> MessagePayload> messagePayload)
{
if (!isKey(key))
{
return key;
}
try
{
key = extractKey(key);
if(messagePayload.containsKey(Label.class))
{
return ResourceBundle.getBundle(TEST_LABELS, locale, getClassLoader()).getString(key);
}
else if(messagePayload.containsKey(TechnicalMessage.class))
{
return ResourceBundle.getBundle(TEST_TECHNICAL_MESSAGES, locale, getClassLoader()).getString(key);
}
return ResourceBundle.getBundle(TEST_MESSAGES, locale, getClassLoader()).getString(key);
}
catch (MissingResourceException e)
{
return key;
}
}
//The full example is available in the code-base (see: TestMessageResolver)
}
|
...
Code Block |
---|
title | Business client specific messages |
---|
borderStyle | solid |
---|
|
@Produces
@RequestScoped
@ClientQualifier
public MessageContext createClientAwareContext(@Jsf MessageContext messageContext,
Client client)
{
MessageResolver clientAwareMessageResolver = createMessageResolverForClient(client.getId());
return messageContext.config().use().messageResolver(clientAwareMessageResolver).create();
}
private MessageResolver createMessageResolverForClient(final String currentClientId)
{
return new MessageResolver()
{
public String getMessage(String messageDescriptor,
Locale locale,
Map<Class, Class<? extends MessagePayload>>MessagePayload> messagePayload)
{
FacesContext facesContext = FacesContext.getCurrentInstance();
try
{
return facesContext.getApplication()
.getResourceBundle(facesContext, currentClientId).getString(messageDescriptor);
}
catch (MissingResourceException e)
{
return "???" + messageDescriptor + "???";
}
}
};
}
|
...