>Basically, those are invokeOnComponent, and the contentInterweaving >/tree built first approach. The only 1.2 thing I need for that is >three new methods in the API. Functionalitywise, we'll be as good as >1.2 with this.
On the subject of duplication of effort, is UIComponent.invokeOnComponent one of these methods ? What are the other two? Dennis Byrne >Stan's work has mostly been done on the unified EL, and the new API >coming along with that. I won't touch this at all. So I wouldn't >reimplement what he has been doing. > >regards, > >Martin > > > > > >On 6/3/06, Sean Schofield <[EMAIL PROTECTED]> wrote: >> Still -1 for me. I agree with Dennis. This will negatively impact >> our progress towards 1.2. Even if those of us opposed are not >> involved in doing the work, its still work that could be done on the >> full JSF 1.2 version (or something else.) >> >> Keep in mind that we are *still* trying to get a tomahawk release out >> the door. So far only Matthias and one non-committer have volunteered >> to help. >> >> Its hard to see how the 1.2 lite version will not involve duplication >> of work. We've already established that Stan's work can't be easily >> separated out into TC 5.5 and TC 6 so basically Martin and others will >> end up duplicating much of what he has already done just to make >> things work on TC 5.5. >> >> Its hard to imagine how this duplication of work is a good thing. >> Either Stan's work will go ignored or Martin will be duplicating what >> Stan did (at least partially.) Given the availabilty of our >> committers it sometimes takes a few weeks to get a minor release out >> the door so I worry that we can't afford to divide our efforts here. >> Three core branches, plus tobago, tomahawk, adf and now the IBM thing. >> We're stretching ourselves way too thin here. >> >> Sean >> >> On 6/2/06, Grant Smith <[EMAIL PROTECTED]> wrote: >> > +1 on Martin's plans. It's a good start to eventually having a pure 1.2 >> > implementation. Let's hit it. >> > >> > >> > On 6/2/06, Martin Marinschek < [EMAIL PROTECTED]> wrote: >> > > Hi Dennis, >> > > >> > > I said I'll do the merge - and I'll do it! >> > > >> > > It will not be 1.1 compliant in a sense of passing the TCK - that's >> > > not possible, the API will change. >> > > >> > > I know that a fully certified JSF1.2 implementation is our ultimate, >> > > and most valuable goal. We'll get there, and I believe faster on this >> > > path, than on the other. More people can work along with us... >> > > >> > > But: I also believe that a 1.1.5 implementation _is_ valuable. There >> > > are quite a few people who are working on JSF right now. They might >> > > not want to switch their environment right now. They want the full >> > > functionality of 1.2 on their environment. They'll get it _only_ with >> > > MyFaces. >> > > >> > > regards, >> > > >> > > Martin >> > > >> > > On 6/2/06, Dennis Byrne <[EMAIL PROTECTED]> wrote: >> > > > >1.4 and 5.5 compatible way, and then in a month do the final step on >> > > > >1.2 pure. >> > > > >> > > > So, 30 days from today? We need JIRA taska and volunteers from the JSF >> > 1.15 group: >> > > > >> > > > Who will do the merge? >> > > > Who will test it for 1.1 compliance? >> > > > Who will bring it back in to compliance? >> > > > >> > > > Perhaps you guys can help me figure out if we have difference in >> > > > values, >> > or difference in cost estimates. We are all in agreement that supporting >> > our own MyFaces 1.15 implementation will delay a actual real certified JSF >> > 1.2 release ? right? Do you just think the delay is trivial, or do you >> > think your 1.15 implementation is more valuable, or do you not value a 1.2 >> > implementation as much as I do? >> > > > >> > > > Dennis Byrne >> > > > >> > > > >regards, >> > > > > >> > > > >Martin >> > > > > >> > > > >On 6/2/06, Dennis Byrne <[EMAIL PROTECTED]> wrote: >> > > > >> @team - what is the game plan for making sure improvements like this >> > are getting into the 1.2 branch? When will 1.2 be trunk ? >> > > > >> >> > > > >> @Grant - not an attack on you >> > > > >> >> > > > >> Dennis Byrne >> > > > >> >> > > > >> >-----Original Message----- >> > > > >> >From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] >> > > > >> >Sent: Friday, June 2, 2006 02:35 PM >> > > > >> >To: [email protected] >> > > > >> >Subject: svn commit: r411228 - >> > /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java >> > > > >> > >> > > > >> >Author: grantsmith >> > > > >> >Date: Fri Jun 2 11:35:51 2006 >> > > > >> >New Revision: 411228 >> > > > >> > >> > > > >> >URL: >> > http://svn.apache.org/viewvc?rev=411228&view=rev >> > > > >> >Log: >> > > > >> >MYFACES-1301: fixes check for stale components >> > > > >> > >> > > > >> > >> > > > >> >Modified: >> > > > >> > >> > myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java >> > > > >> > >> > > > >> >Modified: >> > myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java >> > > > >> >URL: >> > http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java?rev=411228&r1=411227&r2=411228&view=diff >> > > > >> >> > >============================================================================== >> > > > >> >--- >> > myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java >> > (original) >> > > > >> >+++ >> > myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java >> > Fri Jun 2 11:35:51 2006 >> > > > >> >@@ -52,20 +52,18 @@ >> > > > >> > * @version $Revision$ $Date$ >> > > > >> > */ >> > > > >> > public class ApplicationImpl >> > > > >> >- extends Application >> > > > >> >+ extends Application >> > > > >> > { >> > > > >> > private static final Log log = >> > LogFactory.getLog(ApplicationImpl.class); >> > > > >> > >> > > > >> > //~ Instance fields >> > ---------------------------------------------------------------------------- >> > > > >> > >> > > > >> > private final Map >> > _valueBindingCache = >> > > > >> >- new BiLevelCacheMap(90) >> > > > >> >- { >> > > > >> >- protected Object newInstance(Object key) >> > > > >> >- { >> > > > >> >- return new ValueBindingImpl( ApplicationImpl.this, >> > (String) key); >> > > > >> >- } >> > > > >> >- }; >> > > > >> >+ new BiLevelCacheMap(90) { >> > > > >> >+ protected Object newInstance(Object key) { >> > > > >> >+ return new >> > ValueBindingImpl(ApplicationImpl.this, (String) key); >> > > > >> >+ } >> > > > >> >+ }; >> > > > >> > >> > > > >> > private Collection _supportedLocales = >> > Collections.EMPTY_SET; >> > > > >> > private Locale _defaultLocale; >> > > > >> >@@ -193,7 +191,7 @@ >> > > > >> > } >> > > > >> > _propertyResolver = propertyResolver; >> > > > >> > if (log.isTraceEnabled()) log.trace("set PropertyResolver >> > > > >> > = >> > " + propertyResolver.getClass().getName()); >> > > > >> >- } >> > > > >> >+ } >> > > > >> > >> > > > >> > public PropertyResolver getPropertyResolver() >> > > > >> > { >> > > > >> >@@ -270,7 +268,7 @@ >> > > > >> > { >> > > > >> > _componentClassMap.put(componentType, >> > ClassUtils.simpleClassForName(componentClassName)); >> > > > >> > if (log.isTraceEnabled()) log.trace("add Component >> > class = " + componentClassName + >> > > > >> >- " >> > for type = " + componentType); >> > > > >> >+ " for type = " + componentType); >> > > > >> > } >> > > > >> > catch (Exception e) >> > > > >> > { >> > > > >> >@@ -297,7 +295,7 @@ >> > > > >> > >> > _converterIdToClassMap.put(converterId, >> > ClassUtils.simpleClassForName(converterClass)); >> > > > >> > if (log.isTraceEnabled()) log.trace("add Converter id >> > > > >> > = >> > " + converterId + >> > > > >> > " converterClass = " + converterClass); >> > > > >> >- } >> > > > >> >+ } >> > > > >> > catch (Exception e) >> > > > >> > { >> > > > >> > log.error("Converter class " + converterClass + " not >> > found", e); >> > > > >> >@@ -363,7 +361,7 @@ >> > > > >> > { >> > > > >> > _validatorClassMap.put(validatorId, >> > ClassUtils.simpleClassForName(validatorClass)); >> > > > >> > if (log.isTraceEnabled()) log.trace("add Validator id >> > > > >> > = >> > " + validatorId + >> > > > >> >- " >> > class = " + validatorClass); >> > > > >> >+ " class = " + validatorClass); >> > > > >> > } >> > > > >> > catch (Exception e) >> > > > >> > { >> > > > >> >@@ -372,7 +370,7 @@ >> > > > >> > } >> > > > >> > >> > > > >> > public UIComponent createComponent(String componentType) >> > > > >> >- throws FacesException >> > > > >> >+ throws FacesException >> > > > >> > { >> > > > >> > if ((componentType == null) || (componentType.length() == >> > 0)) >> > > > >> > { >> > > > >> >@@ -405,8 +403,8 @@ >> > > > >> > public UIComponent createComponent(ValueBinding valueBinding, >> > > > >> > >> > FacesContext facesContext, >> > > > >> > String >> > componentType) >> > > > >> >- throws FacesException >> > > > >> >- { >> > > > >> >+ throws FacesException >> > > > >> >+ { >> > > > >> > if ((valueBinding == null)) >> > > > >> > { >> > > > >> > log.error("createComponent: valueBinding = null is not >> > allowed"); >> > > > >> >@@ -427,65 +425,55 @@ >> > > > >> > >> > > > >> > if (obj instanceof UIComponent) >> > > > >> > { >> > > > >> >- // check for stale component >> > > > >> >- UIComponent parent = (UIComponent) obj; >> > > > >> >- while (parent.getParent() != null) { >> > > > >> >- parent = parent.getParent(); >> > > > >> >- } >> > > > >> >- if (!(parent instanceof UIViewRoot) || parent == >> > facesContext.getViewRoot()) { >> > > > >> >- return (UIComponent) obj; >> > > > >> >- } >> > > > >> >- else { >> > > > >> >- log.debug("Stale component found while >> > creating component of type [" + componentType + "]" >> > > > >> >- + " for binding [" + >> > valueBinding.getExpressionString() + "]"); >> > > > >> >- } >> > > > >> >+ // check for stale component >> > > > >> >+ UIComponent parent = (UIComponent) obj; >> > > > >> >+ while (parent.getParent() != null) { >> > > > >> >+ parent = parent.getParent(); >> > > > >> >+ } >> > > > >> >+ if (!(parent instanceof UIViewRoot) || parent == >> > facesContext.getViewRoot()) { >> > > > >> >+ return (UIComponent) obj; >> > > > >> >+ } else { >> > > > >> >+ log.debug("Stale component found while creating >> > component of type [" + componentType + "]" >> > > > >> >+ + " for binding [" + >> > valueBinding.getExpressionString() + "]"); >> > > > >> >+ } >> > > > >> > >> > > > >> >- return (UIComponent) obj; >> > > > >> > } >> > > > >> >- else >> > > > >> >- { >> > > > >> >- try { >> > > > >> >+ try { >> > > > >> > UIComponent component = >> > > > >> > createComponent(componentType); >> > > > >> > valueBinding.setValue(facesContext, component); >> > > > >> > return component; >> > > > >> >- } catch(FacesException ex) { >> > > > >> >- log.error("Exception while creating component of >> > type [" + componentType + "]" >> > > > >> >- + " for binding [" + >> > valueBinding.getExpressionString() + "]"); >> > > > >> >- throw ex; >> > > > >> >- } >> > > > >> >+ } catch(FacesException ex) { >> > > > >> >+ log.error("Exception while creating component of type >> > [" + componentType + "]" >> > > > >> >+ + " for binding [" + >> > valueBinding.getExpressionString () + "]"); >> > > > >> >+ throw ex; >> > > > >> >+ >> > > > >> > } >> > > > >> > } >> > > > >> > >> > > > >> >- public Converter createConverter(String converterId) >> > > > >> >- { >> > > > >> >- if ((converterId == null) || (converterId.length() == 0)) >> > > > >> >- { >> > > > >> >+ public Converter createConverter(String converterId) { >> > > > >> >+ if ((converterId == null) || (converterId.length() == 0)) >> > > > >> >{ >> > > > >> > log.error("createConverter: converterId = null is not >> > allowed"); >> > > > >> > throw new >> > NullPointerException("createConverter: converterId = null >> > is not allowed"); >> > > > >> > } >> > > > >> > >> > > > >> > Class converterClass = (Class) >> > _converterIdToClassMap.get(converterId); >> > > > >> > >> > > > >> >- try >> > > > >> >- { >> > > > >> >+ try { >> > > > >> > Converter converter= (Converter) >> > converterClass.newInstance(); >> > > > >> > >> > > > >> > setConverterProperties(converterClass, >> > converter); >> > > > >> > >> > > > >> > return converter; >> > > > >> > } >> > > > >> >- catch (Exception e) >> > > > >> >- { >> > > > >> >+ catch (Exception e) { >> > > > >> > log.error("Could not instantiate converter " + >> > converterClass, e); >> > > > >> > throw new FacesException("Could not instantiate >> > converter: " + converterClass, e); >> > > > >> > } >> > > > >> > } >> > > > >> > >> > > > >> > >> > > > >> >- public Converter createConverter(Class targetClass) >> > > > >> >- { >> > > > >> >- if (targetClass == null) >> > > > >> >- { >> > > > >> >+ public Converter createConverter(Class targetClass) { >> > > > >> >+ if (targetClass == null) { >> > > > >> > log.error("createConverter: targetClass = null is not >> > allowed"); >> > > > >> > throw new >> > NullPointerException("createConverter: targetClass = null >> > is not allowed"); >> > > > >> > } >> > > > >> >@@ -496,112 +484,87 @@ >> > > > >> > } >> > > > >> > >> > > > >> > >> > > > >> >- private Converter internalCreateConverter(Class targetClass) >> > > > >> >- { >> > > > >> >+ private Converter internalCreateConverter(Class targetClass) { >> > > > >> > // Locate a Converter registered for the target class >> > itself. >> > > > >> > String converterClassName = >> > (String)_converterClassNameToClassMap.get(targetClass); >> > > > >> > >> > > > >> > //Locate a Converter registered for interfaces that are >> > > > >> > // implemented by the target class (directly or >> > indirectly). >> > > > >> >- if (converterClassName == null) >> > > > >> >- { >> > > > >> >+ if (converterClassName == null) { >> > > > >> > Class interfaces[] = targetClass.getInterfaces(); >> > > > >> >- if (interfaces != null) >> > > > >> >- { >> > > > >> >- for (int i = 0, len = interfaces.length; i < len; >> > i++) >> > > > >> >- { >> > > > >> >- // search all superinterfaces for a matching >> > converter, create it >> > > > >> >+ if (interfaces != null) { >> > > > >> >+ for (int i = 0, len = interfaces.length; i < len; >> > i++) { >> > > > >> >+ // search all superinterfaces for a matching >> > converter, create it >> > > > >> > Converter converter = >> > internalCreateConverter(interfaces[i]); >> > > > >> >- if (converter != null) >> > > > >> >- { >> > > > >> >+ if (converter != null) { >> > > > >> > return converter; >> > > > >> > } >> > > > >> > } >> > > > >> > } >> > > > >> > } >> > > > >> > >> > > > >> >- if (converterClassName != null) >> > > > >> >- { >> > > > >> >- try >> > > > >> >- { >> > > > >> >+ if (converterClassName != null) { >> > > > >> >+ try { >> > > > >> > Class converterClass = >> > ClassUtils.simpleClassForName(converterClassName); >> > > > >> >- >> > > > >> >+ >> > > > >> > Converter converter = (Converter) >> > converterClass.newInstance(); >> > > > >> > >> > > > >> > >> > setConverterProperties(converterClass, converter); >> > > > >> > >> > > > >> > return converter; >> > > > >> > } >> > > > >> >- catch (Exception e) >> > > > >> >- { >> > > > >> >+ catch (Exception e) { >> > > > >> > log.error ("Could not instantiate converter " + >> > converterClassName, e); >> > > > >> > throw new FacesException("Could not instantiate >> > converter: " + converterClassName, e); >> > > > >> > } >> > > > >> > } >> > > > >> > >> > > > >> > // locate converter for primitive types >> > > > >> >- if (targetClass == Long.TYPE) >> > > > >> >- { >> > > > >> >+ if (targetClass == Long.TYPE) { >> > > > >> > return internalCreateConverter(Long.class); >> > > > >> >- } else if (targetClass == Boolean.TYPE) >> > > > >> >- { >> > > > >> >+ } else if (targetClass == Boolean.TYPE) { >> > > > >> > return internalCreateConverter(Boolean.class); >> > > > >> >- } else if (targetClass == Double.TYPE ) >> > > > >> >- { >> > > > >> >+ } else if (targetClass == Double.TYPE) { >> > > > >> > return internalCreateConverter(Double.class); >> > > > >> >- } else if (targetClass == Byte.TYPE) >> > > > >> >- { >> > > > >> >+ } else if (targetClass == Byte.TYPE) { >> > > > >> > return internalCreateConverter(Byte.class); >> > > > >> >- } else if (targetClass == Short.TYPE) >> > > > >> >- { >> > > > >> >+ } else if (targetClass == Short.TYPE) { >> > > > >> > return internalCreateConverter(Short.class); >> > > > >> >- } else if (targetClass == Integer.TYPE) >> > > > >> >- { >> > > > >> >+ } else if (targetClass == Integer.TYPE) { >> > > > >> > return internalCreateConverter(Integer.class); >> > > > >> >- } else if (targetClass == Float.TYPE) >> > > > >> >- { >> > > > >> >+ } else if (targetClass == Float.TYPE) { >> > > > >> > return internalCreateConverter(Float.class); >> > > > >> >- } else if (targetClass == Character.TYPE) >> > > > >> >- { >> > > > >> >+ } else if (targetClass == Character.TYPE) { >> > > > >> > return internalCreateConverter(Character.class); >> > > > >> > } >> > > > >> > >> > > > >> >- >> > > > >> > //Locate a Converter registered for the superclass (if >> > > > >> > any) >> > of the target class, >> > > > >> > // recursively working up the inheritance hierarchy. >> > > > >> > Class superClazz = targetClass.getSuperclass(); >> > > > >> >- if (superClazz != null) >> > > > >> >- { >> > > > >> >+ if (superClazz != null) { >> > > > >> > return >> > internalCreateConverter(superClazz); >> > > > >> >- } >> > > > >> >- else >> > > > >> >- { >> > > > >> >+ } else { >> > > > >> > return null; >> > > > >> > } >> > > > >> > >> > > > >> > } >> > > > >> > >> > > > >> >- private void setConverterProperties(Class converterClass, >> > Converter converter) >> > > > >> >- { >> > > > >> >+ private void setConverterProperties(Class converterClass, >> > Converter converter) { >> > > > >> > >> > org.apache.myfaces.config.impl.digester.elements.Converter >> > converterConfig = >> > > > >> > ( >> > org.apache.myfaces.config.impl.digester.elements.Converter) >> > > > >> >- >> > _converterClassNameToConfigurationMap.get(converterClass.getName()); >> > > > >> >+ >> > _converterClassNameToConfigurationMap.get( >> > converterClass.getName()); >> > > > >> > >> > > > >> >- if(converterConfig != null) >> > > > >> >- { >> > > > >> >+ if(converterConfig != null) { >> > > > >> > >> > > > >> > Iterator it = converterConfig.getProperties(); >> > > > >> > >> > > > >> >- while (it.hasNext()) >> > > > >> >- { >> > > > >> >+ while ( it.hasNext()) { >> > > > >> > Property property = (Property) it.next(); >> > > > >> > >> > > > >> >- try >> > > > >> >- { >> > > > >> >+ try { >> > > > >> > >> > BeanUtils.setProperty(converter,property.getPropertyName(),property.getDefaultValue()); >> > > > >> > } >> > > > >> >- catch(Throwable th) >> > > > >> >- { >> > > > >> >+ catch(Throwable th) { >> > > > >> > log.error("Initializing converter : >> > "+converterClass.getName()+" with property : "+ >> > > > >> > property.getPropertyName()+" and value >> > : "+property.getDefaultValue()+" failed."); >> > > > >> > } >> > > > >> >@@ -611,10 +574,8 @@ >> > > > >> > >> > > > >> > >> > > > >> > public synchronized MethodBinding createMethodBinding(String >> > reference, Class[] params) >> > > > >> >- throws ReferenceSyntaxException >> > > > >> >- { >> > > > >> >- if ((reference == null) || (reference.length() == 0)) >> > > > >> >- { >> > > > >> >+ throws ReferenceSyntaxException { >> > > > >> >+ if ((reference == null) || ( reference.length() == 0)) { >> > > > >> > log.error("createMethodBinding: reference = null is >> > > > >> > not >> > allowed"); >> > > > >> > throw new >> > NullPointerException("createMethodBinding: reference = null >> > is not allowed"); >> > > > >> > } >> > > > >> >@@ -626,37 +587,30 @@ >> > > > >> > return new MethodBindingImpl(this, reference, params); >> > > > >> > } >> > > > >> > >> > > > >> >- public Validator createValidator(String validatorId) throws >> > FacesException >> > > > >> >- { >> > > > >> >- if ((validatorId == null) || (validatorId.length() == 0)) >> > > > >> >- { >> > > > >> >+ public Validator createValidator(String validatorId) throws >> > FacesException { >> > > > >> >+ if ((validatorId == null) || (validatorId.length() == 0)) >> > > > >> >{ >> > > > >> > log.error("createValidator: validatorId = null is not >> > allowed"); >> > > > >> > throw new >> > NullPointerException("createValidator: validatorId = null >> > is not allowed"); >> > > > >> > } >> > > > >> > >> > > > >> > Class validatorClass = (Class) >> > _validatorClassMap.get(validatorId); >> > > > >> >- if (validatorClass == null) >> > > > >> >- { >> > > > >> >+ if (validatorClass == null) { >> > > > >> > String message = "Unknown validator id '" + >> > > > >> > validatorId >> > + "'."; >> > > > >> > log.error (message); >> > > > >> > throw new FacesException(message); >> > > > >> > } >> > > > >> > >> > > > >> >- try >> > > > >> >- { >> > > > >> >+ try { >> > > > >> > return (Validator) validatorClass.newInstance(); >> > > > >> > } >> > > > >> >- catch (Exception e) >> > > > >> >- { >> > > > >> >+ catch (Exception e) { >> > > > >> > log.error("Could not instantiate validator " + >> > validatorClass, e); >> > > > >> > throw new FacesException("Could not instantiate >> > validator: " + validatorClass, e); >> > > > >> > } >> > > > >> > } >> > > > >> > >> > > > >> >- public ValueBinding createValueBinding(String reference) >> > > > >> >throws >> > ReferenceSyntaxException >> > > > >> >- { >> > > > >> >- if ((reference == null) || (reference.length() == 0)) >> > > > >> >- { >> > > > >> >+ public ValueBinding createValueBinding(String reference) >> > > > >> >throws >> > ReferenceSyntaxException { >> > > > >> >+ if ((reference == null) || (reference.length() == 0)) { >> > > > >> > log.error("createValueBinding: reference = null is not >> > allowed"); >> > > > >> > throw new >> > NullPointerException("createValueBinding: reference = null >> > is not allowed"); >> > > > >> > } >> > > > >> >@@ -664,23 +618,19 @@ >> > > > >> > } >> > > > >> > >> > > > >> > >> > > > >> >- public String getDefaultRenderKitId() >> > > > >> >- { >> > > > >> >+ public String getDefaultRenderKitId() { >> > > > >> > return _defaultRenderKitId; >> > > > >> > } >> > > > >> > >> > > > >> >- public void setDefaultRenderKitId(String defaultRenderKitId) >> > > > >> >- { >> > > > >> >+ public void setDefaultRenderKitId(String defaultRenderKitId) { >> > > > >> > _defaultRenderKitId = defaultRenderKitId; >> > > > >> > } >> > > > >> > >> > > > >> >- public StateManager getStateManager() >> > > > >> >- { >> > > > >> >+ public StateManager getStateManager() { >> > > > >> > return _stateManager; >> > > > >> > } >> > > > >> > >> > > > >> >- public void setStateManager(StateManager stateManager) >> > > > >> >- { >> > > > >> >+ public void setStateManager(StateManager stateManager) { >> > > > >> > _stateManager = stateManager; >> > > > >> > } >> > > > >> > } >> > > > >> > >> > > > >> > >> > > > >> > >> > > > >> >> > > > >> >> > > > >> >> > > > > >> > > > > >> > > > >-- >> > > > > >> > > > >http://www.irian.at >> > > > > >> > > > >Your JSF powerhouse - >> > > > >JSF Consulting, Development and >> > > > >Courses in English and German >> > > > > >> > > > >Professional Support for Apache MyFaces >> > > > > >> > > > >> > > > >> > > > >> > > >> > > >> > > -- >> > > >> > > http://www.irian.at >> > > >> > > Your JSF powerhouse - >> > > JSF Consulting, Development and >> > > Courses in English and German >> > > >> > > Professional Support for Apache MyFaces >> > > >> > >> > >> > >> > -- >> > Grant Smith >> > >> > > >-- > >http://www.irian.at > >Your JSF powerhouse - >JSF Consulting, Development and >Courses in English and German > >Professional Support for Apache MyFaces >
