[ 
https://issues.apache.org/jira/browse/MYFACES-4669?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17852460#comment-17852460
 ] 

Werner Punz edited comment on MYFACES-4669 at 6/5/24 2:04 PM:
--------------------------------------------------------------

Yes Either the spec needs to change and we have to adapt or Mojarra needs to 
fix it, lets wait for the result!

Btw. [~melloware], thanks for digging around, you saved me a few hours of work!

 


was (Author: werpu):
Yes Either the spec needs to change and we have to adapt or Mojarra needs to 
fix it, lets wait for the result!

Btw. thanks for digging around, you saved me a few hours of work!

 

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