JSF 2.2 and java.util.Sets
fastroller Aug 26, 2012 9:53 PMIs there any planning around readying RichFaces for JSF 2.2? I took a milestone release for Mojarra and upgraded the JSF libs on JBoss 7.1. Sadly Richfaces causes my application to fail. It appears there are some improvements around UIComponent that are not backwards compatible. JSF components now implement pass through attributes which is not handled by Richfaces.
If you're wondering why I want to move to JSF2.2 it is because it now handles Set data models. In the mean time I will use an earlier snapshot of JSF2.2 that doesn't have this backwards compatibility break and continue to use Sets!
If anyone is interested here is my sleuthing:
Exception thrown
Caused by: java.lang.AbstractMethodError
at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.startElement(HtmlResponseWriter.java:635) [jsf-impl-2.2.0-m05.jar:2.2.0-m05-SNAPSHOT]
at com.sun.faces.renderkit.html_basic.ScriptRenderer.startElement(ScriptRenderer.java:60) [jsf-impl-2.2.0-m05.jar:2.2.0-m05-SNAPSHOT]
at com.sun.faces.renderkit.html_basic.ScriptRenderer.encodeEnd(ScriptRenderer.java:106) [jsf-impl-2.2.0-m05.jar:2.2.0-m05-SNAPSHOT]
at org.richfaces.component.UITransient.encodeEnd(UITransient.java:236) [richfaces-core-impl-4.2.2.Final.jar:4.2.2.Final]
Mojarra implementation
public void startElement(String name, UIComponent componentForElement) throws IOException { if (name == null) { throw new NullPointerException(MessageUtils.getExceptionMessageString( MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "name")); } closeStartIfNecessary(); isScriptOrStyle(name); scriptOrStyleSrc = false; if ("cdata".equalsIgnoreCase(name)) { isCdata = true; startCDATA(); return; } else if (writingCdata) { // starting an element within a cdata section, // keep escaping disabled isCdata = false; writingCdata = true; } writer.write('<'); writer.write(name); if (null != componentForElement) { Map passThroughAttrs = componentForElement.getPassThroughAttributes(false); if (null != passThroughAttrs && !passThroughAttrs.isEmpty()) { considerPassThroughAttributes(passThroughAttrs); } } closeStart = true; }