in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SheetRenderer.java [173:227]
private void decodeSheetAction(final FacesContext facesContext, final AbstractUISheet component) {
final String sourceId = facesContext.getExternalContext().getRequestParameterMap().get("jakarta.faces.source");
final String clientId = component.getClientId(facesContext);
if (LOG.isDebugEnabled()) {
LOG.debug("sourceId = '{}'", sourceId);
LOG.debug("clientId = '{}'", clientId);
}
final String sheetClientIdWithAction
= clientId + UINamingContainer.getSeparatorChar(facesContext) + SUFFIX_PAGE_ACTION;
if (sourceId != null && sourceId.startsWith(sheetClientIdWithAction)) {
String actionString = sourceId.substring(sheetClientIdWithAction.length());
int index = actionString.indexOf('-');
SheetAction action;
if (index != -1) {
action = SheetAction.valueOf(actionString.substring(0, index));
} else {
action = SheetAction.valueOf(actionString);
}
PageActionEvent event = null;
switch (action) {
case first:
case prev:
case next:
case last:
event = new PageActionEvent(component, action);
break;
case toPage:
case toRow:
case lazy:
event = new PageActionEvent(component, action);
final int target;
final String value;
if (index == -1) {
final Map<String, String> map = facesContext.getExternalContext().getRequestParameterMap();
value = map.get(sourceId);
} else {
value = actionString.substring(index + 1);
}
try {
target = Integer.parseInt(value);
} catch (final NumberFormatException e) {
LOG.error("Can't parse integer value for action " + action.name() + ": " + value);
break;
}
event.setValue(target);
break;
default:
}
if (event != null) {
component.queueEvent(event);
}
}
}