JavaServer TM Faces Release Notes
Change Log

Specification Version: 1.2MR1
Implementation Version: 1.2_04-b16-P02

New Features Added In This Release

This release includes Resource Injection support in Tomcat 6 (6.0.9 or later) and Jetty 6 (6.1.2rc0 or later). No configuration is needed. Just drop in the JARs and leverage the resource injections that the container itself supports. It's also very easy to add additional injection support for additional containers. The following blog entry goes into detail on these features:

We've added one new context initialization parameter since the release of 1.2_03

Paramter Name Description Default Value
com.sun.faces.writeStateAtFormEnd Per the renderkit doc specification, the state information for the view will be written out prior to closing the form tag. However, it may be desirable to have the state information written out after the opening form tag. If this is the case, specifiy this parameter in the web.xml with a value of false true

Issues Resolved In This Release

ID Type Pri Plat Owner State Resolution Summary
461 DEFECT P3 All rlubke RESOLVED FIXED UIInput.validateValue does not honor the severity of a valid
464 DEFECT P3 All rlubke RESOLVED FIXED SelectItem is always escaping itemValue
467 DEFECT P3 Macintos rlubke RESOLVED FIXED ViewHandler.initView() is called a bit too late
468 DEFECT P3 All youngm RESOLVED FIXED NPE on startup in Websphere 6.1
469 DEFECT P3 All rlubke RESOLVED FIXED NPE from Faces Servlet Mapping with Portlet API
470 DEFECT P3 All youngm RESOLVED FIXED UISelectMany fails to convert submitted value where value co
471 DEFECT P4 All rlubke RESOLVED FIXED <f:actionListener> creates new Object, despite of given bind
472 DEFECT P2 All rlubke RESOLVED FIXED HtmlSelectOneRadio ignores escape property on SelectItem
473 DEFECT P4 All jdlee RESOLVED FIXED NPE if UIComponent.getFamily() not overridden
478 DEFECT P1 All rlubke RESOLVED FIXED NPE in RestoreViewPhase
480 DEFECT P3 All rlubke RESOLVED FIXED Tildes are incorrectly munged in output
482 DEFECT P3 All rlubke RESOLVED FIXED Typo in UIData prevents request var from being restored prop
483 DEFECT P3 All jdlee RESOLVED FIXED Problem with h:form param enctype
484 DEFECT P1 All rlubke RESOLVED FIXED Duplicate IDs when using jsp tag-files [+PATCH]
493 DEFECT P1 All rlubke RESOLVED FIXED setRequest does not reset request maps
494 DEFECT P2 Macintos rlubke RESOLVED FIXED UIComponentClassicTagBase.getParentUIComponentClassicTagBase
495 DEFECT P2 All jdlee RESOLVED FIXED NPE in MethodExpressionActionListener.processAction
496 DEFECT P3 All rlubke RESOLVED FIXED ConfigureListener.initalized() call needs to happen sooner
497 DEFECT P3 All rlubke RESOLVED FIXED Provide VariableMapper implementation
498 DEFECT P3 All rlubke RESOLVED FIXED Misleading error message about "Possible cyclic reference to
502 DEFECT P3 All rlubke VERIFIED FIXED Incompatible with facelets
503 DEFECT P2 All rlubke RESOLVED FIXED CommandButton 'type' attribute rendering is failing the TCK
505 DEFECT P2 All rlubke RESOLVED FIXED Avoid using java.beans.Beans.instantiate() for creating managed beans.
507 DEFECT P3 All rlubke RESOLVED FIXED ViewHandlerResponseWrapper.flushContentToWrappedResponse() fails on Jetty
509 DEFECT P2 All rlubke RESOLVED FIXED Client side saved state is deserialized twice.
510 DEFECT P2 All rlubke RESOLVED FIXED StackOverflowException if Application.setPropertyResolver() is used
511 DEFECT P2 All rlubke RESOLVED FIXEED FacesContext.getCurrentInstance() isn't a strong enough check to determine if the application has processed any request
512 DEFECT P2 Macintosh rlubke RESOLVED FIXED Application.setVariableResolver() disables faces-config.xml VariableResolvers
516 DEFECT P3 All rogerk RESOLVED FIXED h:messages Renders Markup With No Messages
499 DEFECT P4 All rlubke RESOLVED FIXED Similar to issue 471 - provide deferred binding implementations of converter and validator tags.
521 DEFECT P1 All rlubke RESOLVED FIXED "&" isn't always escaped (Issue resolved in P01)
522 DEFECT P3 All rlubke RESOLV FIXE Registering PropertyResolvers breaks the JSP ELResolver chain (Issue resolved in P01)
530 DEFECT P2 All rlubke RESOLV FIXE 1.1 based component libraries that make use of UIComponentTag.getParentUIComponentTag will receive a ClassCastException when running with JSF 1.2 (Issue resolved in P01)
532 DEFECT P2 All rlubke RESOLV FIXE Performance: WebappLifecycleListener.handleAttributeEvent hammers on application map (Issue resolved in P01)
429 ENHANCEMENT P5 All jdlee RESOLVED FIXED Make error message better
476 ENHANCEMENT P3 All rlubke RESOLVED FIXED Provovide default InjectionProvider for non-EE environments.
481 ENHANCEMENT P3 All rlubke RESOLVED FIXED JSP ViewHandlerImpl state manager buffering issues
538 DEFECT P2 All rlubke RESOLVED FIXED Incorrect syncronization in ApplicationAssociate.createAndMaybeStoreManagedBeans() (resolved in P02)
541 DEFECT P3 All rlubke RESOLVED FIXED verifyObjects feature needs to handle complex objects (resolved in P02)
542 DEFECT P2 Macintos rlubke RESOLVED FIXED h:commandLink with f:param that has a value that contains an apostrophe breaks functionality (resolved in P02)
544 DEFECT P3 All rlubke RESOLVED FIXED Problems with "Overriding Converter" (resolved in P02)
545 DEFECT P3 All rlubke RESOLVED FIXED NPE if #{cookie.foo} is used when no cookies are present (resolved in P02)
546 DEFECT P3 All rogerk RESOLVED FIXED ViewHandler.createView Can Cause NPE (resolved in P02)
547 DEFECT P3 All rlubke RESOLVED FIXED UnsupportedOperationExceptions hide real error message from ConfigureListener (resolved in P02)
549 DEFECT P3 All rogerk RESOLVED FIXED Util.getFacesMapping Uses Erroneous HttpServletRequest Check (resolved in P02)
561 DEFECT P2 All rlubke RESOLVED FIXED UIComponentBase.findComponent may incorrectly throw an IllegalArgumentException (resolved in P02)
562 DEFECT P2 All rlubke RESOLVED FIXED RequestHeaderMap.keySet().contains() is case-sensitive (resolved in P02)
563 DEFECT P3 All youngm RESOLVED FIXED Make specifying custom ExpressionFactory apply to both JSP 2.0 and 2.1 containers (resolved in P02)
572 DEFECT P2 All rlubke RESOLVED FIXED Restored ViewRoot is not set into the FacesContext soon enough (resolved in P02)
573 DEFECT P3 All rlubke RESOLV FIXED Content interweaving doesn't work as expected in portal environment (resolved in P02)

Updated Service Provider Interfaces (SPIs)

We've added an augmentation to the InjectionProvider mechanism to allow automatic discovery and configuration of InjectionProviders without the need of manually configuring them through the specialized base class DiscoverableInjectionProvider.

DiscoverableInjectionProvider.java
1    package com.sun.faces.spi;
2    
3    import com.sun.faces.util.Util;
4    
5    /**
6     * <p><code>InjectionProvider</code>s that implement this interface
7     * can be configured via <code>META-INF/services/com.sun.faces.spi.InjectionProvider</code>.
8     *
9     * <p>The format of the configuration entries is:</p>
10    * <ul>
11    *   <li><code>&lt;InjectionProviderClassName&gt;:&lt;DelegateClassName&gt;</code></li>
12    * <ul>
13    *
14    * <p>Example:</p}
15    * <ul>
16    *    <li><code>com.sun.faces.vendor.GlassFishInjectionProvider:com.sun.enterprise.InjectionManager</code></li>
17    * </ul>
18    *
19    * <p>Multiple <code>DiscoverableInjectionProvider</code>s can be configured
20    * within a single services entry.</p>
21    */
22   public abstract class DiscoverableInjectionProvider implements InjectionProvider {
23   
24   
25       /**
26        * @param delegateClass the name of the delegate used by the
27        *  <code>InjectionProvider</code> implementation.
28        * @return returns <code>true</code> if the
29        *  <code>InjectionProvider</code> instance
30        *  is appropriate for the container its currently
31        *  deployed within, otherwise return <code>false</code>
32        */
33       public static boolean isInjectionFeatureAvailable(String delegateClass) {
34   
35           try {
36               Util.loadClass(delegateClass, null);
37               return true;
38           } catch (Exception e) {
39               return false;
40           }
41   
42       }
43   
44   }
45