Showing posts with label JSF. Show all posts
Showing posts with label JSF. Show all posts

12 July 2012

Java EE Applications: Calling a JSF page from a non-JSF page

Lab 6 replaces the CustomerController servlet with the ustomerDetails.xhtml JSF page.
Existing JSP pages need to be adapted to call the JSF page. Here's how you call a JSF page from a JSP or plain HTML page and pass a parameter to it.

  1. Change the AllCustomers.jsp page to call the JSF page.
    • Existing call to the servlet
    •  <a href="CustomerController?customerIdentity=<%= customers[i].getId()%>&submit=Get Customer">
    • New call to the JSF page
    • <a href="CustomerDetails.xhtml?customerIdentity=<%= customers[i].getId()%>">  
    • Change the JSF backing bean to receive parameters and call code when it is created by a GET request.
      1. Receive a GET parameter in an attribute
      2. @ManagedBean(name="customerDetails")
        @RequestScoped
        public class CustomerManagedBean {
        
           @ManagedProperty("#{param.customerIdentity}")
           private String customerId = "";
           ...
        }
      3. Call a method when the bean is created. The method looks up data using the value stored in the attribute in the previous step.
      4. @PostConstruct
        public void initCustomer() {
          if (customerId != null && customerId.length()!= 0){
            retrieveCustomer();
          }
        }
        

21 June 2012

Expression Language 3.0 is in public review

The Expression Language (EL) is widely used in JSP and JSF. With version 3 the EL now becomes an independent specification. The EL v3 (JSR 314) is in public review until the end of July. It will be released in sync with Java EE 7 (Update: EL 3.0 was released in may 2013). New features include:

  •  As an independent specification, EL now comes with a standalone API, allowing usage outside a web container.
    • You can write your own ELProcessor. The source code is available, but I wish they had put the javadoc for  browsing at the project site as well.
  • Java 8 stuff
    • Lambda expressions
    • Collection literals follow proposed Java 8 syntax
      • List: [1, "two", 3.0]
      • Set: {1, 2, 3}
      • Map: {"one":1, "two":2, "three":3}
    • Collection streaming
  • Assignment operator (=) for changing values:
    • ${customer.name = 'Jan'}
  • String concatenation: + or cat operator
    • ${‘Welcome ‘ += customer.name += ‘ to our site’}.
  • Support for static references using the T construct (Type). 
    • By default only java.* and javax.* packages are available, but you can modify this using the EL API.
      • ${T(java.util.Calendar).APRIL}
      • ${T(java.util.Calendar).getInstance()}
    •  You can call constructors as a static method without a name. To call the default Calendar constructor:
      • ${T(java.util.Calendar).()}
    • For java.lang you can use the class without using the T construct
      • ${Boolean.TRUE}