# Erste JSF anlegen



## Gast2 (19. Jan 2009)

Hallo,
wie oben erwähnt versuch ich meine erste JSF Seite zu schreiben...
Ich habe mit den Eclipse Webtools eine Dynamic Web Project angelegt.

Und hier wie vielen bestimmt bekannt die typische erste jsf Seite

```
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
   <title>Berechnung eines Flächeninhaltes</title>
</head>

<body>
<f:view>
   <h3>JSF-Beispielanwendung zur Berechnung eines Flächeninhaltes:</h3>
    [i]Dieses Programm berechnet aufgrund der Eingabe einer
    Seitenlänge den Flächeninhalt eines Quadrates.[/i]
    


   
    <h:form id="inputForm">

      Bitte geben Sie eine Seitenlänge ein:   
      <h:inputText value="#{Square.length}" />
      
      <h:commandButton value="Berechnen" action="success" />
   
   </h:form>

</f:view>
</body>
</html>
```
 

nur zeigt mir eclipse viele Fehlermeldungen an...
1.unkwon tag f:view
2. cannot find the tag libary descriptor http://java.sun.com/jsf/html

was mache ich falsch??? Was muss ich noch einfügen??


----------



## HLX (19. Jan 2009)

Hast du die Bibliotheken 'jsf-api.jar' und 'jsf-impl.jar' in den Build Path deines Projekts aufgenommen?


----------



## Gast2 (19. Jan 2009)

Nee hab ich nicht, wo find ich die??? Stand aber auch nirgends dass ich die aufnehmen sollte oder??:### ... 


Ich habe davor ein ganz normales Java project angelegt weil ich die Webtools nicht hatte und hab da ein javaee.jar vom glassfish mit eingebunden... 
da hatte ich das problem nicht und deployen lies es sich auch ohne probleme... eclipse meckert erst seit ich die webtools verwende...


----------



## HLX (19. Jan 2009)

Hast du in irgendeiner Form JSF in dein Eclipse Projekt oder deinen Workspace integriert?

Falls nicht, musst du es zunächst herunterladen. Darin sind die erforderlichen JARs enthalten.

Wenn du in einer JSP-Seite eine externe Tag-Bibliothek verwendest, musst du immer den entsprechenden Tag Library Descriptor (TLD-Datei) im ClassPath haben. Der TLD beschreibt die einzelnen Tags - z.B. welche Attribute sie zulassen und mit welcher Klasse sie implementiert sind. Die Deskriptoren für JSF-Tags befinden sich in den beiden/einer der beiden JARs.


----------



## Gast2 (19. Jan 2009)

Nö hab ich nicht
das war mein classpath


```
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="test"/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
	<classpathentry kind="lib" path="lib/javaee.jar"/>
	<classpathentry kind="output" path="bin"/>
</classpath>
```


und das war die seite keine probeme gehabt...

```
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 

<html>
  <head>
    <title>Recipe DB</title>
    <link rel="stylesheet" type="text/css" href="style.css">
  </head>
  <body>
  
    <jsp:include page="_menu.jsp">
      <jsp:param name="headline" value="Recipe DB - view recipe" />
    </jsp:include>
    
    
    <f:view>
    <h:form id="viewRecipeForm" styleClass="rdb-standard-form">
      <h:outputText value="#{RecipeBean.recipeTitle}" styleClass="rview-title" /> & &
      <h:commandButton action="edit" value="edit" />
    </h:form>
    
    

<span class="rdb-standard-sectionheader">Category</span>
    <h:outputText value="#{RecipeBean.recipeCategory}" rendered="#{!empty RecipeBean.recipeCategory}" /></p>
    
    <div class="rdb-standard-sectionheader">Ingredients</div>
    <div class="rdb-standard-section">
      <table class="ingredients-table">
        <c:forEach var="ingr" items="#{RecipeBean.recipe.ingredients}">
          <tr>
            <td>${ingr.quantity}</td>
            <td>${ingr.unit.abbreviation}</td>
            <td>${ingr.foodItem.name}</td>
          </tr>
        </c:forEach>
      </table>
    </div>
    
    <div class="rdb-standard-sectionheader">Preparation</div>
    <div class="rdb-standard-section">
      <h:outputText value="#{RecipeBean.recipePreparationDesc}"
          rendered="#{fn:length(RecipeBean.recipePreparationDesc) > 0}"/>
    </div>
    
    <div class="rdb-standard-sectionheader">Serving</div>
    <div class="rdb-standard-section">
      <h:outputText value="#{RecipeBean.recipeServingDesc}"
          rendered="#{fn:length(RecipeBean.recipePreparationDesc) > 0}" />
    </div>
  </f:view>
    
    
    <%@include file="_side.jsp" %>
        
  </body>
</html>
```

EDIT: Danke mit den 2 jars geht. 
Warum sind die jars nicht gleich dabei??
Und warum es in dem Beispiel da oben klappt weiß ich auch nicht so rehct ???? =)


----------



## HLX (19. Jan 2009)

Ich kenne das 'javaee.jar' nicht, aber möglicherweise enthält es ebenfalls JSF und damit auch die TLDs.

Sofern du keinen Server unter 'Window --> Preferences --> Server --> Installed Runtimes' angegeben, oder hier einen Tomcat ausgewählt hast, steht dir das 'javaee.jar' natürlich nicht zur Verfügung. In diesem Fall brauchst du die 'jsf-api.jar' und die 'jsf-impl.jar'.

EDIT: die JARs sind sicher nicht dabei, weil damit zum Einen eine spezielle JSP-Implementierung unterstützt werden müsste, und zum Anderen wie du siehst, die Art der Einbindung vom AppServer abhängt. Gleiches gilt auch für das Servlet API. Hier kommen die JARs auch vom Server.


----------



## Gast2 (19. Jan 2009)

> Sofern du keinen Server unter 'Window --> Preferences --> Server --> Installed Runtimes' angegeben, oder hier einen Tomcat ausgewählt hast, steht dir das 'javaee.jar' natürlich nicht zur Verfügung



das versuch ich nachher mal einzustellen ...

ok danke für die infos  =)


----------

