2014-09-28 22 views
0

我已经看过JSF和facelets的一些资源,但不明白一些配置点。什么是之间的区别:facelets模板和客户端的web.xml设置

<url-pattern>/faces/*</url-pattern> 

和:

<url-pattern>*.jsf</url-pattern> 

虽然我知道这是可能有若干个url-pattern元素,除非明确地使用.jsf页,有这种映射没有实际需要,正确?如果只有模板和客户端正在使用,那么它是无关的?

此外,如果facelet模板和客户端在WEB-INF之内,它们是如何访问的?

对于JSF和Facelets的最新版本,似乎没有硬性要求faces-config.xml;正确?

最后,如果Glassfish与facelets客户端/模板一起使用,那么EL是通过CDI?

总体而言,为什么不是这样的客户:

<?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://xmlns.jcp.org/jsf/facelets" 
     xmlns:h="http://xmlns.jcp.org/jsf/html"> 
    <body> 
     <ui:composition template="./template.xhtml"> 
      <ui:define name="top"> 
       top 
      </ui:define> 
      <ui:define name="content"> 
       expression language not evaluating? 
       <h:outputLabel value="#{hello.hi(fred)}" /> 
      </ui:define> 
     </ui:composition> 
    </body> 
</html> 

使用该模板:

<?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://xmlns.jcp.org/jsf/facelets" 
     xmlns:h="http://xmlns.jcp.org/jsf/html"> 
    <h:head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <h:outputStylesheet name="./css/default.css"/> 
     <h:outputStylesheet name="./css/cssLayout.css"/> 
     <title>Facelets Template</title> 
    </h:head> 
    <h:body> 
     <div id="top" class="top"> 
      <ui:insert name="top">Top</ui:insert> 
     </div> 
     <div id="content" class="center_content"> 
      <ui:insert name="content">Content</ui:insert> 
     </div> 
    </h:body> 
</html> 

这个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.PROJECT_STAGE</param-name> 
     <param-value>Development</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>/faces/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>faces/client.xhtml</welcome-file> 
    </welcome-file-list> 
</web-app> 

使用这个bean:

package pkg; 

import javax.faces.bean.SessionScoped; 
import javax.inject.Named; 


@Named 
@SessionScoped 
public class Hello { 

    public Hello() { 
    } 

    public String hi(String name) { 
     return "hi " + name; 
    } 

} 

相反,EL只显示在页面像这样:

[email protected]:~$ 
[email protected]:~$ lynx http://localhost:8080/HelloExpressionLanguage/client.xhtml -dump 
<?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://xmlns.jcp.org/jsf/facelets" 
     xmlns:h="http://xmlns.jcp.org/jsf/html"> 
    <body> 
     <ui:composition template="./template.xhtml"> 
      <ui:define name="top"> 
       top 
      </ui:define> 
      <ui:define name="content"> 
       expression language not evaluating? 
       <h:outputLabel value="#{hello.hi(fred)}" /> 
      </ui:define> 
     </ui:composition> 
    </body> 
</html>[email protected]:~$ 
[email protected]:~$ 
[email protected]:~$ lynx http://localhost:8080/HelloExpressionLanguage/ -dump 
    top 

    expression language not evaluating? 
[email protected]:~$ 
[email protected]:~$ 

回答

1

目前尚不清楚的是在那里你想看到预期的“hello弗雷德”输出。 在这个例子中,你使用ui:insert,但是它用于模板。

,如果你想使用hello方法在豆你将需要使用一个EL表达式和输出啊:outputLabel标签:

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

UPDATE1(如果不处理JSF代码):

你应该检查你的web.xml。它必须包含一个servlet和这样的监听器:

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

注意:您使用.xhtml或.hello或别的东西,你必须匹配服务器映射的URL模式。

+0

为什么'ui:insert'用于模板?这个例子当然使用了模板,所以我不明白你在做什么。使用'ui:insert'是不正确的? – Thufir 2014-10-29 13:15:19

0

所需的输出(在一定程度上),在该 “杆” 是输出,从喂豆,下面:

[email protected]:~$ 
[email protected]:~$ 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 
[email protected]:~$ 

索引。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> 

菜单:

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

鹦鹉:

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

鹘,讲,到这样的程度:

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

然而,输出从directoryBean没有按放不下去 网页。

模板:

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

目录豆:

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

} 

你好豆(注意,这是@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; 
    } 

} 

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>