Skip to content

Commit

Permalink
Implement improved behavior of f;ajax render=@this in composites
Browse files Browse the repository at this point in the history
  • Loading branch information
BalusC committed Apr 14, 2021
1 parent 2305577 commit 62c37d2
Showing 1 changed file with 21 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.sun.faces.renderkit.html_basic;

import static jakarta.faces.component.UINamingContainer.getSeparatorChar;

import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
Expand Down Expand Up @@ -291,8 +293,13 @@ private static void appendIds(FacesContext facesContext, UIComponent component,

boolean first = true;

UIComponent composite = UIComponent.getCompositeComponentParent(component);
String separatorChar = String.valueOf(getSeparatorChar(facesContext));

for (String id : ids) {
if (id.trim().length() == 0) {
String expression = id.trim();

if (expression.length() == 0) {
continue;
}
if (!first) {
Expand All @@ -301,8 +308,17 @@ private static void appendIds(FacesContext facesContext, UIComponent component,
first = false;
}

if (id.equals("@all") || id.equals("@none") || id.equals("@form") || id.equals("@this")) {
builder.append(id);
if (composite != null) {
if (expression.startsWith("@this")) {
expression = expression.replaceFirst("@this", separatorChar + composite.getClientId(facesContext));
}
else if (composite.getParent() != null && !expression.startsWith(separatorChar)) {
expression = composite.getParent().getClientId(facesContext) + separatorChar + expression;
}
}

if (expression.equals("@all") || expression.equals("@none") || expression.equals("@form") || expression.equals("@this")) {
builder.append(expression);
} else {
if (searchExpressionContext == null) {
searchExpressionContext = SearchExpressionContext.createSearchExpressionContext(facesContext, component, EXPRESSION_HINTS, null);
Expand All @@ -312,9 +328,9 @@ private static void appendIds(FacesContext facesContext, UIComponent component,
}
String resolvedClientId = null;
try {
resolvedClientId = handler.resolveClientId(searchExpressionContext, id);
resolvedClientId = handler.resolveClientId(searchExpressionContext, expression);
} catch (ComponentNotFoundException cnfe) {
resolvedClientId = getResolvedId(component, id);
resolvedClientId = getResolvedId(component, expression);
}
builder.append(resolvedClientId);
}
Expand Down

0 comments on commit 62c37d2

Please sign in to comment.