org.richfaces.renderkit.focus.FormFocusRenderStrategy Maven / Gradle / Ivy
The newest version!
package org.richfaces.renderkit.focus;
import javax.faces.component.UIForm;
import javax.faces.context.FacesContext;
import org.richfaces.component.AbstractFocus;
/**
* Strategy for rendering Focus in {@link AbstractFocus.Mode#FORM}
*/
public class FormFocusRenderStrategy extends AbstractFocusRenderStrategy {
@Override
public void postAddToView(FacesContext context, AbstractFocus component) {
UIForm form = (UIForm) RENDERER_UTILS.getNestingForm(component);
FocusRendererUtils.markFormWithFocus(form);
}
@Override
public boolean shouldApply(FacesContext context, AbstractFocus component) {
if (FocusRendererUtils.isFocusEnforced(context)) {
return false;
}
if (component.isDelayed()) {
return false;
}
UIForm form = (UIForm) RENDERER_UTILS.getNestingForm(component);
if (!context.isPostback()) {
if (FocusRendererUtils.hasViewFocus(context.getViewRoot())) {
return false;
} else if (isSomeAnotherFormFocusRendered(context, component)) {
return false;
} else {
FocusRendererUtils.markFirstFormFocusRendered(context, component);
return true;
}
} else {
return RENDERER_UTILS.isFormSubmitted(context, form);
}
}
private boolean isSomeAnotherFormFocusRendered(FacesContext context, AbstractFocus component) {
String firstFormFocusRendered = FocusRendererUtils.getFirstFormFocusRendered(context);
if (firstFormFocusRendered == null) {
return false;
}
return !firstFormFocusRendered.equals(component.getClientId(context));
}
@Override
public String getFocusCandidatesAsString(FacesContext context, AbstractFocus component) {
UIForm form = (UIForm) RENDERER_UTILS.getNestingForm(component);
if (!context.isPostback()) {
return form.getClientId(context);
}
if (RENDERER_UTILS.isFormSubmitted(context, form)) {
return getFocusCandidatesAsString(context, component, form);
}
return null;
}
}