Melloware created MYFACES-4668:
----------------------------------
Summary: Quarkus: Programmatic Views not working
Key: MYFACES-4668
URL: https://issues.apache.org/jira/browse/MYFACES-4668
Project: MyFaces Core
Issue Type: Bug
Components: Extension Feature
Affects Versions: 4.1.0-RC1, 4.0.2, 5.0.0
Reporter: Melloware
Original report: [https://github.com/melloware/quarkus-faces/issues/444]
I tried to add a programmatic view with the `@View` annotation, but when I
access http://localhost:8080/facelet.xhml it returns 404
{code:java}
@View("/facelet.xhtml")
@ApplicationScoped
public class FaceletView extends Facelet {
@Override
public void apply(FacesContext facesContext, UIComponent parent) {
if
(!facesContext.getAttributes().containsKey(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) {
return (T)
facesContext.getApplication().createComponent(facesContext, componentType,
null);
}
}
}
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)