JSF, Facelets (und Seam2) - Konfigurationsfehler?

DerGrinsemann

Mitglied
Hallo!

An Hand der unten angeführten Konfiguration sollte eigentlich der Aufruf "home.xhtml" problemlos funktionieren. Statt dessen erfolgt kein Rendering des Templates.

Wenn ich "home.seam" aufrufe - wird das Template gerendert.

Wo liegt mein Denk- oder Konfigurationsfehler?

web.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">      

    <display-name>NewsContest</display-name>

    <listener>
        <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
    </listener>

    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>

    <context-param>
        <param-name>facelets.DEVELOPMENT</param-name>
        <param-value>true</param-value>
    </context-param>

    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>

    <filter>
        <filter-name>Seam Filter</filter-name>
        <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>Seam Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <servlet>
        <servlet-name>Seam Resource Servlet</servlet-name>
        <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Seam Resource Servlet</servlet-name>
        <url-pattern>/seam/resource/*</url-pattern>
    </servlet-mapping>
    
    <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>*.seam</url-pattern>
    </servlet-mapping>

</web-app>

faces-config.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

    <!-- Facelets support -->
    <application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    </application>
    
</faces-config>

template.xhtml
Code:
<?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:s="http://jboss.com/products/seam/taglib">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Test Seam Framework</title>
</head>
<body>

<div id="document">
	<div id="header">
        Header
    </div>
	<div id="container">
		<div id="sidebar">
			<ui:insert name="sidebar"/>
		</div>
		<div id="content">
			<ui:insert name="content"/>
		</div>
	</div>
</div>
</body>
</html>

home.xhtml
Code:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition 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"
	  			xmlns:s="http://jboss.com/products/seam/taglib"
                xmlns:a="http://richfaces.org/a4j"
				template="/WEB-INF/layout/template.xhtml">

<!-- content -->
<ui:define name="content">
    Test-Content
</ui:define>

<!-- sidebar -->
<ui:define name="sidebar">
    <h:form rendered="#{not identity.loggedIn}">
          <div class="memberLogin">
            <div class="loginHeader">Member Login</div>
            <h:messages globalOnly="true"/>
            <div class="loginRow">
              <h:outputLabel for="name" value="Member name" styleClass="loginLabel"/>
              <h:inputText id="name" value="#{credentials.username}"/>
            </div>
            <div class="validationMsg">
              <h:message for="name"/>
            </div>
            <div class="loginRow">
              <h:outputLabel for="password" value="Password" styleClass="loginLabel"/>
              <h:inputSecret id="password" value="#{credentials.password}" redisplay="true"/>
            </div>
            <div class="validationMsg">
              <h:message for="password"/>
            </div>
            <div class="buttons">
              <h:commandButton value="LOGIN" action="#{identity.login}" styleClass="loginButton"/>
            </div>
            <br class="clear"/>
          </div>
        </h:form>
</ui:define>

</ui:composition>

Ausgabe bei Aufruf von home.xhtml
Code:
Test-Content
Member Login

Ausgabe bei Aufruf von home.seam
Code:
Header
Member Login
Member name
Password


Test-Content
 
Zuletzt bearbeitet:
Schwerer Denkfehler! Korrekter Aufruf natürlich mit ".seam"!

Wie kann man den Aufruf der ".xhtml" mittels Browser unterbinden?

Marco
 
Zurück