Search in sources :

Example 26 with UIForm

use of jakarta.faces.component.UIForm in project myfaces by apache.

the class ViewPoolMyFacesRequestTestCase method testStaticPage1_2.

@Test
public void testStaticPage1_2() throws Exception {
    Locale locale = null;
    startViewRequest("/staticPage.xhtml");
    processLifecycleExecute();
    locale = facesContext.getViewRoot().getLocale();
    executeBeforeRender(facesContext);
    executeBuildViewCycle(facesContext);
    // Add a component in order to trigger a dynamic update
    UIOutput testComponent = (UIOutput) application.createComponent(UIOutput.COMPONENT_TYPE);
    testComponent.setId("testId");
    testComponent.setValue("Some Text");
    UIForm form = (UIForm) facesContext.getViewRoot().findComponent("mainForm");
    form.getChildren().add(testComponent);
    executeViewHandlerRender(facesContext);
    executeAfterRender(facesContext);
    UIViewRoot root = new UIViewRoot();
    root.setLocale(locale);
    root.setRenderKitId("HTML_BASIC");
    root.setViewId("/staticPage.xhtml");
    ViewPoolProcessor processor = ViewPoolProcessor.getInstance(facesContext);
    ViewPool viewPool = processor.getViewPool(facesContext, root);
    ViewEntry entry = viewPool.popStaticOrPartialStructureView(facesContext, root);
    Assert.assertNotNull(entry);
    Assert.assertEquals(RestoreViewFromPoolResult.COMPLETE, entry.getResult());
    // Check the component was removed
    UIForm form2 = (UIForm) entry.getViewRoot().findComponent("mainForm");
    Assert.assertNotNull(form2);
    UIOutput testComponent2 = (UIOutput) form2.findComponent("testId");
    Assert.assertNull(testComponent2);
    endRequest();
}
Also used : Locale(java.util.Locale) UIOutput(jakarta.faces.component.UIOutput) UIForm(jakarta.faces.component.UIForm) ViewPoolProcessor(org.apache.myfaces.view.facelets.ViewPoolProcessor) UIViewRoot(jakarta.faces.component.UIViewRoot) Test(org.junit.Test)

Example 27 with UIForm

use of jakarta.faces.component.UIForm in project myfaces by apache.

the class HtmlRadioRendererBase method encodeEnd.

@Override
public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException {
    RendererUtils.checkParamValidity(facesContext, uiComponent, UISelectOne.class);
    UISelectOne selectOne = (UISelectOne) uiComponent;
    String layout = getLayout(selectOne);
    // default to LINE_DIRECTION
    Boolean usingTable = Boolean.FALSE;
    if (layout != null) {
        if (layout.equals(PAGE_DIRECTION)) {
            usingTable = Boolean.TRUE;
        } else if (layout.equals(LINE_DIRECTION)) {
            usingTable = Boolean.FALSE;
        } else if (layout.equals(LAYOUT_LIST)) {
            usingTable = null;
        } else {
            log.severe("Wrong layout '" + layout + "' defined for component " + ComponentUtils.getPathToComponent(selectOne));
        }
    }
    ResponseWriter writer = facesContext.getResponseWriter();
    Map<String, List<ClientBehavior>> behaviors = null;
    if (uiComponent instanceof ClientBehaviorHolder) {
        behaviors = ((ClientBehaviorHolder) uiComponent).getClientBehaviors();
        if (!behaviors.isEmpty()) {
            ResourceUtils.renderDefaultJsfJsInlineIfNecessary(facesContext, writer);
        }
    }
    String group = selectOne instanceof HtmlSelectOneRadio ? ((HtmlSelectOneRadio) selectOne).getGroup() : null;
    if (group != null && !group.isEmpty()) {
        if (!groupFirst.containsKey(group)) {
            groupFirst.put(group, selectOne);
        }
        List selectItemList = RendererUtils.getSelectItemList(selectOne, facesContext);
        if (selectItemList != null && !selectItemList.isEmpty()) {
            Converter converter = HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, selectOne);
            Object currentValue = null;
            // must contain a value expression.
            if (selectOne.getValueExpression("value") != null) {
                currentValue = RendererUtils.getStringFromSubmittedValueOrLocalValueReturnNull(facesContext, selectOne);
            } else {
                currentValue = RendererUtils.getStringFromSubmittedValueOrLocalValueReturnNull(facesContext, groupFirst.get(group));
            }
            SelectItem selectItem = (SelectItem) selectItemList.get(0);
            renderGroupOrItemRadio(facesContext, selectOne, selectItem, currentValue, converter, usingTable, group, 0);
        } else {
            // Deferred case: find real component with attached selectItems
            UIForm form = ComponentUtils.findClosest(UIForm.class, uiComponent);
            GetSelectItemListCallback callback = new GetSelectItemListCallback(selectOne, group);
            form.visitTree(VisitContext.createVisitContext(facesContext, null, FIND_SELECT_LIST_HINTS), callback);
            renderGroupOrItemRadio(facesContext, selectOne, callback.getSelectItem(), callback.getCurrentValue(), callback.getConverter(), usingTable, group, callback.getIndex());
        }
    } else {
        // Render as single component
        writer.startElement(usingTable != null ? HTML.TABLE_ELEM : HTML.UL_ELEM, selectOne);
        HtmlRendererUtils.renderHTMLAttributes(writer, selectOne, HTML.SELECT_TABLE_PASSTHROUGH_ATTRIBUTES);
        if (behaviors != null && !behaviors.isEmpty()) {
            writer.writeAttribute(HTML.ID_ATTR, selectOne.getClientId(facesContext), null);
        } else {
            HtmlRendererUtils.writeIdIfNecessary(writer, selectOne, facesContext);
        }
        if (usingTable == Boolean.FALSE) {
            // selectOne);
            writer.startElement(HTML.TR_ELEM, null);
        }
        List selectItemList = RendererUtils.getSelectItemList(selectOne, facesContext);
        Converter converter = HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, selectOne);
        Object currentValue = RendererUtils.getStringFromSubmittedValueOrLocalValueReturnNull(facesContext, selectOne);
        int itemNum = 0;
        for (int i = 0; i < selectItemList.size(); i++) {
            SelectItem selectItem = (SelectItem) selectItemList.get(i);
            itemNum = renderGroupOrItemRadio(facesContext, selectOne, selectItem, currentValue, converter, usingTable, itemNum);
        }
        if (usingTable == Boolean.FALSE) {
            writer.endElement(HTML.TR_ELEM);
        }
        writer.endElement(usingTable != null ? HTML.TABLE_ELEM : HTML.UL_ELEM);
    }
}
Also used : UIForm(jakarta.faces.component.UIForm) ClientBehaviorHolder(jakarta.faces.component.behavior.ClientBehaviorHolder) HtmlSelectOneRadio(jakarta.faces.component.html.HtmlSelectOneRadio) VisitHint(jakarta.faces.component.visit.VisitHint) ResponseWriter(jakarta.faces.context.ResponseWriter) SelectItem(jakarta.faces.model.SelectItem) Converter(jakarta.faces.convert.Converter) ArrayList(java.util.ArrayList) List(java.util.List) UISelectOne(jakarta.faces.component.UISelectOne)

Example 28 with UIForm

use of jakarta.faces.component.UIForm in project myfaces by apache.

the class HtmlInputFileRendererBase method encodeEnd.

@Override
public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException {
    renderInput(facesContext, component);
    if (!facesContext.isProjectStage(ProjectStage.Production) && facesContext.isPostback() && (facesContext.getPartialViewContext().isPartialRequest() || facesContext.getPartialViewContext().isAjaxRequest())) {
        UIForm form = ComponentUtils.findClosest(UIForm.class, component);
        if (form != null && form instanceof HtmlForm) {
            String content = ((HtmlForm) form).getEnctype();
            if (content == null || !content.contains("multipart/form-data")) {
                FacesMessage message = new FacesMessage("file upload requires a form with" + " enctype equal to multipart/form-data");
                facesContext.addMessage(component.getClientId(), message);
            }
        }
    }
}
Also used : HtmlForm(jakarta.faces.component.html.HtmlForm) UIForm(jakarta.faces.component.UIForm) FacesMessage(jakarta.faces.application.FacesMessage)

Example 29 with UIForm

use of jakarta.faces.component.UIForm in project myfaces by apache.

the class HtmlLinkRendererBase method renderCommandLinkStart.

protected void renderCommandLinkStart(FacesContext facesContext, UIComponent component, String clientId, Object value, String style, String styleClass) throws IOException {
    ResponseWriter writer = facesContext.getResponseWriter();
    Map<String, List<ClientBehavior>> behaviors = null;
    // h:commandLink can be rendered outside a form, but with warning (jsf 2.0 TCK)
    UIForm form = ComponentUtils.findClosest(UIForm.class, component);
    boolean disabled = HtmlRendererUtils.isDisabled(component);
    if (disabled || form == null) {
        writer.startElement(HTML.SPAN_ELEM, component);
        if (component instanceof ClientBehaviorHolder) {
            behaviors = ((ClientBehaviorHolder) component).getClientBehaviors();
            if (!behaviors.isEmpty()) {
                HtmlRendererUtils.writeIdAndName(writer, component, facesContext);
            } else {
                HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);
            }
            long commonPropertiesMarked = 0L;
            if (isCommonPropertiesOptimizationEnabled(facesContext)) {
                commonPropertiesMarked = CommonHtmlAttributesUtil.getMarkedAttributes(component);
            }
            // only render onclick if != disabled
            if (!disabled) {
                if (behaviors.isEmpty() && isCommonPropertiesOptimizationEnabled(facesContext)) {
                    CommonHtmlAttributesUtil.renderEventProperties(writer, commonPropertiesMarked, component);
                    CommonHtmlAttributesUtil.renderFocusBlurEventProperties(writer, commonPropertiesMarked, component);
                } else {
                    if (isCommonEventsOptimizationEnabled(facesContext)) {
                        Long commonEventsMarked = CommonHtmlEventsUtil.getMarkedEvents(component);
                        CommonHtmlEventsUtil.renderBehaviorizedEventHandlers(facesContext, writer, commonPropertiesMarked, commonEventsMarked, component, behaviors);
                        CommonHtmlEventsUtil.renderBehaviorizedFieldEventHandlersWithoutOnchangeAndOnselect(facesContext, writer, commonPropertiesMarked, commonEventsMarked, component, behaviors);
                    } else {
                        HtmlRendererUtils.renderBehaviorizedEventHandlers(facesContext, writer, component, behaviors);
                        HtmlRendererUtils.renderBehaviorizedFieldEventHandlersWithoutOnchangeAndOnselect(facesContext, writer, component, behaviors);
                    }
                }
            } else {
                if (behaviors.isEmpty() && isCommonPropertiesOptimizationEnabled(facesContext)) {
                    CommonHtmlAttributesUtil.renderEventPropertiesWithoutOnclick(writer, commonPropertiesMarked, component);
                    CommonHtmlAttributesUtil.renderFocusBlurEventProperties(writer, commonPropertiesMarked, component);
                } else {
                    if (isCommonEventsOptimizationEnabled(facesContext)) {
                        Long commonEventsMarked = CommonHtmlEventsUtil.getMarkedEvents(component);
                        CommonHtmlEventsUtil.renderBehaviorizedEventHandlersWithoutOnclick(facesContext, writer, commonPropertiesMarked, commonEventsMarked, component, behaviors);
                        CommonHtmlEventsUtil.renderBehaviorizedFieldEventHandlersWithoutOnchangeAndOnselect(facesContext, writer, commonPropertiesMarked, commonEventsMarked, component, behaviors);
                    } else {
                        HtmlRendererUtils.renderBehaviorizedEventHandlersWithoutOnclick(facesContext, writer, component, behaviors);
                        HtmlRendererUtils.renderBehaviorizedFieldEventHandlersWithoutOnchangeAndOnselect(facesContext, writer, component, behaviors);
                    }
                }
            }
            if (isCommonPropertiesOptimizationEnabled(facesContext)) {
                CommonHtmlAttributesUtil.renderAnchorPassthroughPropertiesDisabledWithoutEvents(writer, commonPropertiesMarked, component);
            } else {
                HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.ANCHOR_PASSTHROUGH_ATTRIBUTES_DISABLED_WITHOUT_EVENTS);
            }
        } else {
            HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);
            if (isCommonPropertiesOptimizationEnabled(facesContext)) {
                CommonHtmlAttributesUtil.renderAnchorPassthroughPropertiesDisabled(writer, CommonHtmlAttributesUtil.getMarkedAttributes(component), component);
            } else {
                HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.ANCHOR_PASSTHROUGH_ATTRIBUTES_DISABLED);
            }
        }
    } else {
        if (component instanceof ClientBehaviorHolder) {
            behaviors = ((ClientBehaviorHolder) component).getClientBehaviors();
            renderBehaviorizedJavaScriptAnchorStart(facesContext, writer, component, clientId, behaviors, form);
            if (!behaviors.isEmpty()) {
                HtmlRendererUtils.writeIdAndName(writer, component, facesContext);
            } else {
                // If onclick is not null, both onclick and server side script are rendered
                // using faces.util.chain(...) js function. We need to check that case and force
                // id/name rendering. It is possible to do something else in that case and
                // do not render the script using faces.util.chain, but for now it is ok.
                String commandOnclick;
                if (component instanceof HtmlCommandLink) {
                    commandOnclick = ((HtmlCommandLink) component).getOnclick();
                } else {
                    commandOnclick = (String) component.getAttributes().get(HTML.ONCLICK_ATTR);
                }
                if (commandOnclick != null) {
                    HtmlRendererUtils.writeIdAndName(writer, component, facesContext);
                } else {
                    HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);
                }
            }
            long commonPropertiesMarked = 0L;
            if (isCommonPropertiesOptimizationEnabled(facesContext)) {
                commonPropertiesMarked = CommonHtmlAttributesUtil.getMarkedAttributes(component);
            }
            if (behaviors.isEmpty() && isCommonPropertiesOptimizationEnabled(facesContext)) {
                CommonHtmlAttributesUtil.renderEventPropertiesWithoutOnclick(writer, commonPropertiesMarked, component);
                CommonHtmlAttributesUtil.renderFocusBlurEventProperties(writer, commonPropertiesMarked, component);
            } else {
                HtmlRendererUtils.renderBehaviorizedEventHandlersWithoutOnclick(facesContext, writer, component, behaviors);
                HtmlRendererUtils.renderBehaviorizedFieldEventHandlersWithoutOnchangeAndOnselect(facesContext, writer, component, behaviors);
            }
            if (isCommonPropertiesOptimizationEnabled(facesContext)) {
                CommonHtmlAttributesUtil.renderAnchorPassthroughPropertiesWithoutStyleAndEvents(writer, commonPropertiesMarked, component);
            } else {
                HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.ANCHOR_PASSTHROUGH_ATTRIBUTES_WITHOUT_STYLE_AND_EVENTS);
            }
        } else {
            renderJavaScriptAnchorStart(facesContext, writer, component, clientId, form);
            HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);
            if (isCommonPropertiesOptimizationEnabled(facesContext)) {
                CommonHtmlAttributesUtil.renderAnchorPassthroughPropertiesWithoutOnclickAndStyle(writer, CommonHtmlAttributesUtil.getMarkedAttributes(component), component);
            } else {
                HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.ANCHOR_PASSTHROUGH_ATTRIBUTES_WITHOUT_ONCLICK_WITHOUT_STYLE);
            }
        }
        HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_ATTR, HTML.STYLE_ATTR, style);
        HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_CLASS_ATTR, HTML.STYLE_CLASS_ATTR, styleClass);
    }
    // render value as required by JSF 1.1 renderkitdocs
    if (value != null) {
        writer.writeText(value.toString(), ComponentAttrs.VALUE_ATTR);
    }
    // render warning message for a h:commandLink with no nesting form
    if (form == null) {
        writer.writeText(": This link is deactivated, because it is not embedded in a JSF form.", null);
    }
}
Also used : ResponseWriter(jakarta.faces.context.ResponseWriter) HtmlCommandLink(jakarta.faces.component.html.HtmlCommandLink) List(java.util.List) UIForm(jakarta.faces.component.UIForm) ClientBehaviorHolder(jakarta.faces.component.behavior.ClientBehaviorHolder)

Example 30 with UIForm

use of jakarta.faces.component.UIForm in project myfaces by apache.

the class HtmlLinkRendererBase method encodeEnd.

@Override
public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException {
    // check for NP
    super.encodeEnd(facesContext, component);
    if (component instanceof UICommand) {
        renderCommandLinkEnd(facesContext, component);
        UIForm form = ComponentUtils.findClosest(UIForm.class, component);
        if (form != null) {
            HtmlFormRendererBase.renderScrollHiddenInputIfNecessary(form, facesContext, facesContext.getResponseWriter());
        }
    } else if (component instanceof UIOutcomeTarget) {
        renderOutcomeLinkEnd(facesContext, component);
    } else if (component instanceof UIOutput) {
        renderOutputLinkEnd(facesContext, component);
    } else {
        throw new IllegalArgumentException("Unsupported component class " + component.getClass().getName());
    }
}
Also used : UIOutput(jakarta.faces.component.UIOutput) UICommand(jakarta.faces.component.UICommand) UIForm(jakarta.faces.component.UIForm) UIOutcomeTarget(jakarta.faces.component.UIOutcomeTarget)

Aggregations

UIForm (jakarta.faces.component.UIForm)56 UIComponent (jakarta.faces.component.UIComponent)19 UIViewRoot (jakarta.faces.component.UIViewRoot)15 PrintWriter (java.io.PrintWriter)14 UIOutput (jakarta.faces.component.UIOutput)10 UIInput (jakarta.faces.component.UIInput)8 ClientBehaviorHolder (jakarta.faces.component.behavior.ClientBehaviorHolder)7 FacesContext (jakarta.faces.context.FacesContext)7 ResponseWriter (jakarta.faces.context.ResponseWriter)7 Test (org.junit.Test)7 List (java.util.List)5 UICommand (jakarta.faces.component.UICommand)4 HtmlCommandLink (jakarta.faces.component.html.HtmlCommandLink)4 VisitHint (jakarta.faces.component.visit.VisitHint)4 Locale (java.util.Locale)4 Map (java.util.Map)4 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)4 ViewPoolProcessor (org.apache.myfaces.view.facelets.ViewPoolProcessor)4 FacesException (jakarta.faces.FacesException)3 FacesMessage (jakarta.faces.application.FacesMessage)3