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();
}
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);
}
}
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);
}
}
}
}
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);
}
}
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());
}
}
Aggregations