[ https://issues.apache.org/jira/browse/MYFACES-4669?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17850692#comment-17850692 ]
Melloware commented on MYFACES-4669: ------------------------------------ What it seems to come down to is this. {code:java} var htmlTag = new UIOutput(); htmlTag.setValue("<html xmlns=\"http://www.w3.org/1999/xhtml\">"); rootChildren.add(htmlTag); {code} MyFaces escapes that but Mojarra just renders it exactly to browser. I don't know what the Faces spec says about this.... > Programmatic Facelet Not Rendering Correctly > -------------------------------------------- > > Key: MYFACES-4669 > URL: https://issues.apache.org/jira/browse/MYFACES-4669 > Project: MyFaces Core > Issue Type: Bug > Components: General > Affects Versions: 4.0.2, 5.0.0, 4.1.0-RC3 > Reporter: Melloware > Assignee: Werner Punz > Priority: Major > Attachments: image-2024-05-28-17-42-16-539.png, > image-2024-05-28-17-43-37-052.png, programmatic_view.zip > > > Attached is an example: > Run > {code:java} > mvn clean jetty:run -Pmojarra40{code} > and navigate to [http://localhost:8080/facelet.xhtml] you will see the > programmatic view renders correctly. > !image-2024-05-28-17-42-16-539.png! > > Run > {code:java} > mvn clean jetty:run -Pmyfaces40{code} > and navigate to [http://localhost:8080/facelet.xhtml] you will see the > programmatic view renders incorrectly with ESCAPED HTML tags. [~werpu] this > looks like more double escaping for XML? > !image-2024-05-28-17-43-37-052.png! > {code:java} > package org.apache.myfaces.core.extensions.quarkus.showcase.view; > import jakarta.enterprise.context.ApplicationScoped; > import jakarta.faces.annotation.View; > import jakarta.faces.application.StateManager; > import jakarta.faces.component.UIComponent; > import jakarta.faces.component.UIOutput; > import jakarta.faces.component.html.HtmlBody; > import jakarta.faces.component.html.HtmlCommandButton; > import jakarta.faces.component.html.HtmlForm; > import jakarta.faces.component.html.HtmlOutputText; > import jakarta.faces.context.FacesContext; > import jakarta.faces.view.facelets.Facelet; > @View("/facelet.xhtml") > @ApplicationScoped > public class FaceletView extends Facelet > { > @Override > public void apply(FacesContext facesContext, UIComponent parent) > { > if > (!facesContext.getAttributes().containsKey(StateManager.IS_BUILDING_INITIAL_STATE)) > { > return; > } > var components = new ComponentBuilder(facesContext); > var rootChildren = parent.getChildren(); > var doctype = new UIOutput(); > doctype.setValue("<!DOCTYPE html>"); > rootChildren.add(doctype); > var htmlTag = new UIOutput(); > htmlTag.setValue("<html xmlns=\"http://www.w3.org/1999/xhtml\">"); > rootChildren.add(htmlTag); > HtmlBody body = components.create(HtmlBody.COMPONENT_TYPE); > rootChildren.add(body); > HtmlForm form = components.create(HtmlForm.COMPONENT_TYPE); > form.setId("form"); > body.getChildren().add(form); > HtmlOutputText message = > components.create(HtmlOutputText.COMPONENT_TYPE); > message.setId("message"); > HtmlCommandButton actionButton = > components.create(HtmlCommandButton.COMPONENT_TYPE); > actionButton.setId("button"); > actionButton.addActionListener( > e -> message.setValue("Hello, World! Welcome to Faces 4.0 on > Jakarta EE 10")); > actionButton.setValue("Greet"); > form.getChildren().add(actionButton); > parent.getChildren().add(message); > htmlTag = new UIOutput(); > htmlTag.setValue("</html>"); > rootChildren.add(htmlTag); > } > private static class ComponentBuilder > { > FacesContext facesContext; > ComponentBuilder(FacesContext facesContext) > { > this.facesContext = facesContext; > } > @SuppressWarnings("unchecked") > <T> T create(String componentType) > { > try > { > return (T) > facesContext.getApplication().createComponent(componentType); > } > catch (ClassCastException e) > { > throw new IllegalArgumentException("Component type " + > componentType + " is not valid.", e); > } > } > } > } > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)