[ 
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)

Reply via email to