0 Replies Latest reply on May 30, 2007 7:01 PM by Neill Robbins

    :selectItems and extended EL?

    Neill Robbins Newbie


      Here is what I wanna do:

      I have a drop down list in my page. Inside my <h:selectOneMenu> tag I have a <s:selectItems> to iterate over a collection of instances of class Book. The varaible I have defined in the s:selectItems to do this is called "book"

      Now I want each selectItem in the list to have a label set to a description of the current book in the iteration. I also want the description to be configurable from a message in a bundle.

      One way I have tried is to set the label attribute to '#{messages.book_description} and have book_description=#{book.author}-#{book.title} in the messages.properties file. But this just quotes me "#{book.author}-#{book.title}" I.e does not do the value replacement for the book.

      Another thing I have tried is to have a seam component with a function defined on it "calculateBookDescription(Book book)" and then set the label attribute to "#component.calculateBookDescription(book)".

      Actually, this would be my preferred route I think because it means the book description can be constructed with a function that has acces to data from a wider context than just stuff available on a Book instance. For example I could have a a description like: "Author {0} - Title {1} - BundlePrice {2}", where BundlePrice depends upon a shopping cart total value or something like that.

      Anyway, this doesn't work either. I get a ParseException saying:

      Caused by: com.sun.el.parser.ParseException: Encountered "(" at line 1, column 34.
      Was expecting one of:
      "}" ...
      "." ...
      "[" ...
      ">" ...

      My guess is this is because the <s:selectItems> label attribute does not support Method expressions, only Value expressions and the Seam EL only works for Value expressions.

      Any ideas about how I could achieve the desired functionality (getting a dynamic description on the label attribute) would be much appreciated!!