[seam-issues] [JBoss JIRA] (SEAMINTL-70) Document usage of BundleTemplateMessage/TemplateMessage

Gerald Turner (JIRA) jira-events at lists.jboss.org
Thu Mar 1 18:41:39 EST 2012


    [ https://issues.jboss.org/browse/SEAMINTL-70?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12672962#comment-12672962 ] 

Gerald Turner commented on SEAMINTL-70:
---------------------------------------

I apologize about my bad attempt to use the Messages bean, I understand Seam3 and CDI a lot better now than I did months ago.  This bug still holds true that there should be better documentation.

My understanding is that Messages should work like the following:

  @Inject
  private Messages m;

  public void doSomething() {
    // Messages with severity and fixed summary
    m.info("Info message");
    m.warn("Warning message!");

    // Interpolated summary
    m.error("There is an error with {0}", foo);

    // Summary and detail
    m.info("Info").detail("Process complete");

    // Interpolated summary and detail
    m.info("Stored {0}", foo)
     .detail("{0} has been stored to the database")
     .detailParams(foo);
  }

...none of this nonsense I had originally posted about injecting a TemplateMessage.

There are a few caveats (bugs?) which sent me down the wrong path:

  1. Interpolation is homebrew and doesn't work like java.text.MessageFormat (formatting not supported, e.g. "{1,time}", and no brace escape with archaic apostrophe problem, e.g. "array='{'{2}'}'").

  2. org.jboss.seam.faces.status.MessagesAdapter explicitly ignores the detail message (overriding with null), making some of my use cases not work with JSF, code:

  void convert(@Observes @Before @RenderResponse final PhaseEvent event, Messages messages) {
    Set<Message> savedMessages = (Set<Message>) context.get(FLASH_MESSAGES_KEY);
    if (savedMessages != null) {
      for (Message m : savedMessages) {
        event.getFacesContext().addMessage(m.getTargets(),
         new FacesMessage(getSeverity(m.getLevel()), m.getText(), null));

  ... note that null at the end!

FYI I'm using Seam 3.1.0.Final now.

                
> Document usage of BundleTemplateMessage/TemplateMessage
> -------------------------------------------------------
>
>                 Key: SEAMINTL-70
>                 URL: https://issues.jboss.org/browse/SEAMINTL-70
>             Project: Seam International
>          Issue Type: Feature Request
>          Components: Messages
>    Affects Versions: 3.1.0.Beta3
>            Reporter: Gerald Turner
>            Assignee: Ken Finnigan
>            Priority: Optional
>             Fix For: 3.1.1.Beta1
>
>   Original Estimate: 3 hours
>  Remaining Estimate: 3 hours
>
> As a user, the current documentation is sufficient for severity+text messages, however on closer inspection of the Message class, I see that detail and targets properties are available, much like FacesMessage.
> I dug around the seam-international source and experimented with a bean having fields/method like the following:
>   @Inject
>   private Messages messages;
>   @Inject
>   private transient TemplateMessage message;
>   public void doSometing() {
>     messages.add(message.level(Level.WARN).text("Text {0}, {1}, {2}").textParams('a', 'b', 'c').detail("Detail {0}, {1}, {2}").detailParams(1, 2, 3).targets("message").build());
>     messages.add(message.level(Level.FATAL).text("Fatality!").targets("message").build());
>   }
> This works.  A few caveats:
> * TemplateMessage field has to be marked transient, otherwise get WELD error during deployment about Serializable bean having non-Serializable field.
> * Make sure to call add(Message) signature (invoke build()) instead of add(MessageBuilder), otherwise only the most recent message is added.
> * doSomething method is not reentrant/thread-safe because of the builder.
> I'd prefer to use Messages instead of the builders, perhaps have a methods like info(String text, String details, String targets, Object... args), however that gets ugly with the varargs, having to cast Object[], etc.  Perhaps I should stick with FacesMessages.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the seam-issues mailing list