web.xml setup for facelets template and client

后端 未结 2 1614
暗喜
暗喜 2020-12-22 07:50

I\'ve looked at a few resources for JSF and facelets, but don\'t understand a few configuration points. What\'s the distinction between:

         


        
相关标签:
2条回答
  • 2020-12-22 08:01

    It is not clear that where do you want to see the expected "hello fred" output. In the example you use ui:insert, but it for templates.

    if you want to use the hello method in the bean you will need to use an EL expression and for the output a h:outputLabel tag:

    <h:outputLabel value="#{helloWorld.hello('fred')}" />
    

    Update1 (if JSF code not processed):

    You should check your web.xml. It have to contains a servlet and a listener like this:

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    

    Note: of you use .xhtml or .hello or something else, you have to match the url-pattern of the server-mapping.

    0 讨论(0)
  • 2020-12-22 08:17

    The desired output (to an extent), in that "bar" is output, from the Hello bean, below:

    thufir@dur:~$ 
    thufir@dur:~$ lynx http://localhost:8080/Birds/falcon.xhtml -dump
                               The Happy Birds Directory
    
    Contents table
         __________________________________________________________________
    
       [1]Home
       [2]Parrot
       [3]Eagle
       [4]Falcon
    
                                         Falcon
    
       The Happy Birds Directory contains birds. bean says bar
    
    References
    
       1. http://localhost:8080/Birds/falcon.xhtml
       2. http://localhost:8080/Birds/falcon.xhtml
       3. http://localhost:8080/Birds/falcon.xhtml
       4. http://localhost:8080/Birds/falcon.xhtml
    thufir@dur:~$ 
    

    index.xhtml:

    <!DOCTYPE    html  PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN"  
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core">
    
        <body>
            This and everything before will be ignored
            <ui:composition template="template.xhtml">
                <ui:define name="navigation">
                    <ui:include src="menu.xhtml"/>
                </ui:define>
            </ui:composition>
            This and everything after will be ignored
        </body>
    </html>
    

    menu:

    <!DOCTYPE    html  PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN"  
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core">
        <body>
            This and everything before will be ignored
            <ui:composition>
                <h3>Contents table</h3>
                <hr/>
                <h:panelGrid columns="1">
                    <h:commandLink value="Home" action="home" />
                    <h:commandLink value="Parrot"
                                   action="parrot" />
                    <h:commandLink value="Eagle"
                                   action="eagle" />
                    <h:commandLink value="Falcon"
                                   action="falcon" />
                </h:panelGrid>
            </ui:composition>
            This and everything after will be ignored
        </body>
    </html>
    

    parrot:

    <!DOCTYPE    html  PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN"  
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core">
        <body>
            This and everything before will be ignored
            <ui:composition template="template.xhtml">
                <ui:define name="navigation">
                    <ui:include src="menu.xhtml"/>
                </ui:define>
                <ui:define name="main">
                    <h1>Parrot</h1>
                    <p>
                        Parrots are interesting birds...
                    </p>
                </ui:define>
            </ui:composition>
            This and everything after will be ignored
        </body>
    </html>
    

    the falcon, speaks, to an extent:

    <!DOCTYPE    html  PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN"  
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core">
        <body>
            This and everything before will be ignored
            <ui:composition template="template.xhtml">
                <ui:define name="navigation">
                    <ui:include src="menu.xhtml"/>
                </ui:define>
                <ui:define name="main">
                    <h1>Falcon</h1>
                    <p>
                        <p>The Happy Birds Directory
                            contains #{directoryBean.totalCount} birds.
                            bean says #{hello.foo()}
                        </p>
                    </p>
                </ui:define>
            </ui:composition>
            This and everything after will be ignored
        </body>
    </html>
    

    however, output from the directoryBean doesn't get put into the web page.

    the template:

    <?xml version='1.0' encoding='UTF-8' ?> 
    <!DOCTYPE    html  PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN"  
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core">
        <head>
            <title>The Happy Birds Directory</title>
            <style type="text/css">
                <!--
                .box {
                    float: right;
                    width: 50%;
                    border: black dotted 1px;
                    padding: 5px
                }
                -->
            </style>
        </head>
        <body>
            <h:form>
                <h1>The Happy Birds Directory</h1>
                <div class="box">
                    <ui:insert name="navigation"/>
                </div>
                <ui:insert name="main">
                    Welcome to the nest!
                </ui:insert>
            </h:form>
        </body>
    </html>
    

    directory bean:

    package dur;
    
    import javax.faces.bean.SessionScoped;
    import javax.inject.Named;
    
    @Named
    @SessionScoped
    public class DirectoryBean {
    
        private int totalCount = 99;
    
        public DirectoryBean() {
        }
    
        public int getTotalCount() {
            System.out.println(totalCount);
            return totalCount;
        }
    
    }
    

    hello bean (note that it's @ManagedBean):

    package dur;
    
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    import javax.inject.Named;
    
    @Named
    @SessionScoped
    @ManagedBean(name = "hello")
    public class Hello {
    
        public Hello() {
        }
    
        public String foo() {
            return "bar";
        }
    
        public String hi(String name) {
            return "hi " + name;
        }
    
    }
    

    the web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
        <context-param>
            <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
            <param-value>.xhtml</param-value>
        </context-param>
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.xhtml</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <welcome-file-list>
            <welcome-file>index.xhtml</welcome-file>
        </welcome-file-list>
    </web-app>
    
    0 讨论(0)
提交回复
热议问题