4.1.10 has been released
- Maven Central: https://repo1.maven.org/maven2/org/glassfish/jakarta.faces/4.1.10/
- Milestone: https://github.com/eclipse-ee4j/mojarra/milestone/75?closed=1
What's Changed
- Fix #5733: fallback using response encoding when request encoding is by @BalusC in #5734
- Backport of inline js for non-CSP apps by @jasondlee in #5732
- Add a WildFly profile for testing by @jasondlee in #5738
- Fix #5735: add MojarraVersion so faces.js gets v= param by @BalusC in #5737
- Issue 5741 - Fix CSP-related rendering in OutcomeTargetButtonRenderer by @jasondlee in #5742
- Update feature pack coords for WildFly 40 Final, EE 11 variant by @jasondlee in #5743
- Update WildFly feature pack version to 40.0.0.Final by @jasondlee in #5744
- Fix #5750: NPE when extensionless mapping is used without faces config by @BalusC in #5751
- Fix ui:debug under CSP: drop gratuitous eval in generated script by @BalusC in #5765
- Fix NPE rendering h:inputText with pt: attribute and f:ajax #5772 by @BalusC in #5773
- Emit a development-stage warning when a component binding is not request scoped by @BalusC in #5790
- Treat a declared default as satisfying a required composite attribute by @BalusC in #5820
- Fix #5837 render event handler attribute once when set via expression by @BalusC in #5839
- Do not destroy the @ViewScoped beans of a view map which is still in use by @BalusC in #5845
Performance review (#5753)
A large batch of Faces lifecycle performance improvements, developed on 4.1 and 5.0 under the #5753 performance-review effort (the paired 4.0 backports are included in the compare range below):
- Reduce component tree allocations + cache resolved Renderer to speed up Restore View / Render Response by @BalusC in #5754
- Cache CDI bean resolution to eliminate per-render BeanManager lookups by @BalusC in #5752
- Response-writer performance improvements (range-emit + buffer elimination) by @BalusC in #5755
- Add test/perf benchmark module to compare Faces lifecycle phase timings across mojarra branches by @BalusC in #5756
- Three small request-hot-path improvements: FacetsMap empty short-circuit, descriptor-map computeIfAbsent, and UIData/UIRepeat restore-state hoist by @BalusC in #5757
- Reduce request-pipeline overhead (state, traversal, render output, events) by @BalusC in #5759
- Reduce request-pipeline overhead (state, traversal, render output, events) — 4.0 backport by @BalusC in #5760
- Fix slow RESTORE_VIEW: replace the descendant-mark-id cache with a refresh-gated direct scan by @BalusC in #5761
- Fix slow RESTORE_VIEW: replace the descendant-mark-id cache with a refresh-gated direct scan — 4.0 backport by @BalusC in #5762
- Reduce RESTORE_VIEW overhead: dynamic-add gate, field-backed Facelets markers, ancestor memoization by @BalusC in #5764
- Backport #5764 to 4.0: reduce RESTORE_VIEW overhead (dynamic-add gate, field-backed Facelets markers, ancestor memoization) by @BalusC in #5766
- Eliminate nested UIData/UIRepeat per-row state cost; field-back UIInput hot properties by @BalusC in #5767
- Backport #5767 to 4.0: eliminate nested UIData/UIRepeat per-row state cost; field-back UIInput hot properties by @BalusC in #5768
- Reduce per-component buildView/render overhead (lazy state map, UIOutput converter, rendererType, AttributesMap getter) by @BalusC in #5770
- Backport #5770 to 4.0: reduce per-component buildView/render overhead by @BalusC in #5771
- Backport #5774 into 4.0 by @BalusC in #5775
- Backport #5774 into 4.1 by @BalusC in #5776
- Reduce per-component request-pipeline overhead by @BalusC in #5777
- Partial-state-saving and component-tree-walk performance improvements by @BalusC in #5778
- Backport #5777 and #5778 into 4.0 by @BalusC in #5779
- Replace composite-expression cache with guard + per-attribute memoization by @BalusC in #5782
- Consolidate and calibrate the test/perf benchmark scenarios by @BalusC in #5781
- Make dynamic component add/remove restore O(N) instead of O(N²) by @BalusC in #5783
- Backport #5781, #5782, #5783 into 4.0 by @BalusC in #5784
- Postback/render performance: dynamic-action regression fix + CDI & event-dispatch overhead (#5753) by @BalusC in #5785
- Backport #5785 into 4.0 by @BalusC in #5786
- Fix PerfBenchIT ajax scenarios to send faces.js-resolved client ids by @BalusC in #5788
- Trim per-component overhead on the dynamic add/remove path by @BalusC in #5791
- Reduce per-component overhead in encode and view build by @BalusC in #5793
- Backport #5791 and #5793 into 4.0 by @BalusC in #5794
- Reduce attribute-handling reflective overhead in buildView and render by @BalusC in #5796
- Backport #5796 to 4.0: reduce attribute-handling reflective overhead by @BalusC in #5797
- Reduce render/decode StateHelper and reflective overhead by @BalusC in #5798
- Backport #5798 into 4.0 — reduce render/decode StateHelper and reflective overhead by @BalusC in #5799
- Cut per-component createComponent overhead in buildView by @BalusC in #5800
- Cut per-component createComponent overhead in buildView (backport #5800 to 4.0) by @BalusC in #5802
- Field-back component value expressions to cut Restore View cost by @BalusC in #5805
- Field-back component value expressions to cut Restore View cost (4.0 backport) by @BalusC in #5806
- Fix CCE in isRendered() on String-valued rendered expression (regression from #5754) by @BalusC in #5801
- Render children appended during a parent's own encode by @BalusC in #5807
- Backport #5807 to 4.0: Render children appended during a parent's own encode by @BalusC in #5808
- Backport #5811 to 4.0: Skip redundant render-time facelet re-apply for static views by @BalusC in #5812
- Backport jakartaee/faces#2191 to 4.0: skip redundant composite-flag re-derivation on Restore View walk by @BalusC in #5813
- Default the render-time facelet re-apply skip; rename its param by @BalusC in #5815
- Re-apply views with dynamic f:view / f:loadBundle inputs (regression from #5811) by @BalusC in #5816
- Backport Restore View allocation reductions (#5818, faces#2194) to 4.0 by @BalusC in #5819
- Backport #5821 to 4.0: three view-lifecycle perf levers by @BalusC in #5822
- Rework test/perf scenarios: realism, coverage, ~2-3ms sizing by @BalusC in #5823
- Backport #5824 to 4.0: c:forEach render-reapply skip + ViewScope FacesContext dedup by @BalusC in #5825
- Restructure perf bench into a component-family x variant matrix by @BalusC in #5827
- Backport converter + c:forEach caching to 4.0 (#5828, #5829, jakartaee/faces#2199) by @BalusC in #5831
- Backport #5830 to 4.1: perf bench convertDateTime + form-invalid-ajax by @BalusC in #5832
- Add missing f:convertDateTime to the shared form-fields date input by @BalusC in #5833
- Backport to 4.0: Cache the parse formatter in DateTimeConverter.getAsObject by @BalusC in #5834
- Backport #5835 to 4.0: index the Facelets tag-id lookup on refresh by @BalusC in #5836
- Backport jakartaee/faces#2201 to 4.0: app-scope java.time formatters by @BalusC in #5838
- Backport reduce PROCESS_VALIDATIONS overhead (parser/validator/transient-state caching) to 4.0 by @BalusC in #5840
- test/perf: share one input set across scenarios; per-field messages + typed form fields by @BalusC in #5841
- Backport EL resolution, composite component and component-id performance to 4.0 by @BalusC in #5843
- 4.0 backport: validation EL resolution + buildView performance by @BalusC in #5847
- Backport dynamic-component and state-saving perf improvements to 4.0 (#5848, #5849, #5851, faces#2209) by @BalusC in #5853
Full Changelog: 4.1.9-RELEASE...4.1.10-RELEASE
Notes for upgraders
Changed default behavior
- The redundant render-time Facelets re-apply is now skipped by default for safe static views (partial state saving, non-transient, no dynamic add/remove, no build-time-dynamic JSTL), the bulk of the render-phase speedup. This matches MyFaces, which already skips by default via its
org.apache.myfaces.REFRESH_TRANSIENT_BUILD_ON_PSS=autodefault. Restore the legacy always-re-apply withcom.sun.faces.refreshTransientBuildOnPSS=true(#5815). Views with dynamicf:view/f:loadBundleinputs are re-applied automatically (#5816).
New / changed context parameters
com.sun.faces.refreshTransientBuildOnPSS(boolean, defaultfalse) — settrueto opt out of the re-apply skip above. Example: a custom or third-party Facelets tag handler that applies per-request state to the tree during the build (asf:view/f:loadBundledo) but does not mark the view build-time-dynamic — its updates would otherwise stay frozen at the initial-build values across postbacks. A view is marked build-time-dynamic automatically when it contains any ofc:if,c:forEach,c:choose,c:set,c:catch, or a non-literalui:include/ui:decorate/ui:composition; there is no portable/spec API to force it (Mojarra's internal hook is theprotected TagHandlerImpl.markDynamicTransientBuild). If none of those apply, set this totrueto restore the pre-4.1.10 unconditional re-apply.com.sun.faces.disableIdUniquenessCheck— now acceptstrue|false|auto(was boolean).autoskips the duplicate component-id check whenProjectStage=Production; defaultfalsestill always checks. The nearest MyFaces counterpart isorg.apache.myfaces.CHECK_ID_PRODUCTION_MODE(valuestrue|auto|false, defaultauto), but itsautois narrower: in Production it still checks on the initial GET request and on postbacks that add components programmatically, skipping only the per-request walk on static postbacks — it does not disable the check outright the way Mojarra'sautodoes.
Other visible changes
- The
faces.jsresource URL now carries av=<version>cache-busting parameter, and the running build is published to#{applicationScope['com.sun.faces.mojarraVersion']}(specversion/implversion) for EL/script use (#5737).