All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.larmic.butterfaces.component.renderkit.html_basic.text.TextRenderer Maven / Gradle / Ivy

The newest version!
package de.larmic.butterfaces.component.renderkit.html_basic.text;

import de.larmic.butterfaces.component.html.text.HtmlText;
import de.larmic.butterfaces.component.html.text.part.HtmlAutoComplete;
import de.larmic.butterfaces.component.partrenderer.RenderUtils;
import de.larmic.butterfaces.util.StringUtils;

import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.FacesRenderer;
import java.io.IOException;
import java.util.List;
import java.util.Map;

@FacesRenderer(componentFamily = HtmlText.COMPONENT_FAMILY, rendererType = HtmlText.RENDERER_TYPE)
public class TextRenderer extends AbstractHtmlTagRenderer {

    @Override
    protected void encodeEnd(final HtmlText component, final ResponseWriter writer) throws IOException {
        final HtmlAutoComplete autoCompleteChild = findAutoCompleteChild(component);
        if (autoCompleteChild != null) {
            RenderUtils.renderJQueryPluginCall(autoCompleteChild.getClientId(), "_butterAutoCompleteInit()", writer, component);
        }
    }

    @Override
    public void decode(final FacesContext context, final UIComponent component) {
        super.decode(context, component);

        final HtmlText text = (HtmlText) component;

        final HtmlAutoComplete autoCompleteChild = findAutoCompleteChild(text);

        if (autoCompleteChild != null) {
            final ExternalContext external = context.getExternalContext();
            final Map params = external.getRequestParameterMap();
            final String behaviorEvent = params.get("javax.faces.behavior.event");
            final String searchValue = params.get("params");

            if ("autocomplete".equals(behaviorEvent) && StringUtils.isNotEmpty(searchValue)) {
                autoCompleteChild.getCachedAutoCompleteValues().clear();
                text.setSubmittedValue(null);
                text.setLocalValueSet(false);
                final List values = autoCompleteChild.getAutoComplete().autoComplete(searchValue);
                if (values != null) {
                    autoCompleteChild.getCachedAutoCompleteValues().addAll(values);
                }
            }
        }
    }

    @Override
    protected void postEncodeInput(FacesContext context, UIComponent component) throws IOException {
        final HtmlAutoComplete autoCompleteChild = findAutoCompleteChild(component);
        if (autoCompleteChild != null) {
            autoCompleteChild.encodeAll(context);
        }
    }

    @Override
    protected void renderAdditionalInputAttributes(final FacesContext context,
                                                   final UIComponent component,
                                                   final ResponseWriter writer) throws IOException {
        final HtmlAutoComplete autoCompleteChild = findAutoCompleteChild(component);
        if (autoCompleteChild != null) {
            writer.writeAttribute("autocomplete", "off", null);
            writer.writeAttribute("autocorrect", "off", null);
        }
    }

    private HtmlAutoComplete findAutoCompleteChild(final UIComponent component) {
        HtmlAutoComplete autoComplete = null;

        for (UIComponent uiComponent : component.getChildren()) {
            if (uiComponent instanceof HtmlAutoComplete) {
                autoComplete = (HtmlAutoComplete) uiComponent;
            }
        }

        return autoComplete;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy