Mapowanie stron nie działa, brak komponentów JSF - projekt Mavena

0

Witam
Od paru dni zacząłem używać mavena i chce stworzyć prostą aplikacje na JSF. Stworzylem projekt mavena: maven-archetype-webapp, potem w dependencies dodałem JSF, wygenerowałem faces-config.xml. Zrobiłem prostą strone a.xhtml, stworzyłem tomcata(uzywam IntelliJ) i uruchomiłem. Prawym na strone i: "Open in browser". Otworzyło się w chromie, ale nie renderowały się komponenty JSF. No to dodałem do web.xml mapowanie na .jsf .faces .xhtml i /faces/* no i pojawił się problem.

Od tego momentu uruchomienie nawet tak jak wczesniej (bez mapowania) daje błąd 404. nie działa ani localhost:8080/nazwa_projektu/a.xhtml/faces/jsf, ani localhost:8080/a.xhtml/jsf/faces.

Nie mam pojęcia co może być tego przyczyną, ale bije się z tym już jakiś czas i za cholere nie moge dojść o co chodzi. Na google juz przeklepałem chyba każdy możliwy link, przeczytalem artykuły, po stackoverflow szukałem i nic mi nie pomaga.

Tak więc problemy są dwa:

  1. Nie wiem co zrobić, zeby strona była mapowana. Wczesniej jak robiłem proste projekty IntelliJ to właśnie w mapowaniu leżał problem nie pokazujących się komponentow JSF.
  2. Brak komponentów JSF ;)

KOD:
a.xhtml:

<?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:h="http://java.sun.com/jsf/html">

<h:head>
    <title>Simple JSF Facelets page</title>
</h:head>

<h:body>
    NAPIS NAD
    <h:form>
        NAPIS W
        <h:inputText/>
        <h:commandButton value="przycisk"/>
    </h:form>
    <h:commandButton value="asdada"/>
    NAPIS POD
</h:body>

</html> 

web.xml:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <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>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

</web-app>
 

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.maciej</groupId>
  <artifactId>Mejwn</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Mejwn Maven Webapp</name>
  <a href="http://maven.apache.org">http://maven.apache.org</a>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
      <dependency>
          <groupId>javax.faces</groupId>
          <artifactId>javax.faces-api</artifactId>
          <version>2.2</version>
          <scope>provided</scope>
      </dependency>
  </dependencies>

  <build>
    <finalName>Mejwn</finalName>
  </build>
</project>
 

Co mogę zrobić?

pozdrawiam!

0

O dziwo sprawę rozwiązałem oO
Sam nie wiem jak to się stało, tak jakby dependencies JSF'a miały wpływ na komponenty jsf i zarówno(o dziwo) na mapowanie
Zmieniłem w pom.xml:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.maciej</groupId>
  <artifactId>Mejwn</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Mejwn Maven Webapp</name>
  <a href="http://maven.apache.org">http://maven.apache.org</a>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
      <dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-api</artifactId>
          <version>2.2.4</version>
      </dependency>
      <dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-impl</artifactId>
          <version>2.2.4</version>
      </dependency>

  </dependencies>

    <build>
    <finalName>Mejwn</finalName>
  </build>
</project>

I jakimś cudem działa każde możliwe mapowanie. Zawsze myślałem, że to web.xml odpowiada za takie rzeczy, a przeciez ten plik nie jest związany tylko z JSF, a z każdym innym projektem webowym na innych frameworkach.
Oprócz tego, że działa, miłoby było, gdyby ktoś wyłumaczył mi dlaczego :) Dependencies JSFa maja taki wpływ na aplikacje?

I małe pytania:
czym się różni jsf-api od jsf-impl? w zależnościach w pom.xmlu

0

Chłopie! Trochę powagi! Czemu nie przeczytałeś czym jest JSF?
JSF tak samo jak cała reszta JEE to jest SPECYFIKACJA a nie IMPLEMENTACJA. To jest tylko API, interfejsy, konwencje, nic więcej. Żeby "działało" potrzebujesz jakiejś implementacji. Co więcej, tych implementacji jest dość sporo, więc jest z czego wybierać.

0

Tak to wiem @Shalom, ze JSF to specyfikacja ;) z tego co wiem domyślna technologia(inaczej implementacja) jest facelets
W takim razie api to moja specyfikacja, a impl to implementacja? tak mi się zdawało właśnie, mogłem wspomnieć to może bym uniknął twojego naskoku :D

@NoZi
Zapewne dlatego, że uruchomiłem pierwszy projekt Mavena 2 dni temu. Ale pewnie ty już od początku robiłeś wszystko jak należy :)

0

Nie, ale jak widzisz nie przychodzę na forum pytać o podstawy podstaw. Czytasz niby tych linków/tutoriali itd. itp. a przychodzisz tak naprawdę z niczym.
No off, pozdro.

0

Zawsze myślałem, że forum służy do rozwiązywania problemów, bez znaczenia czy są duże czy drobne. Skoro coś poznaje, robię tak jak karzą w artykule itd i nie działa to tworze pytanie na forum, proste. A, że wybralem 4programmers to juz przepraszam, tak wyszło ;)
Poznając następną technologie postaram się ją umieć od razu.

Nawiązując do tematu, ciekawi mnie czy mapowanie bierze się z konwencji JSFa? skoro to technologia do widoku to teoretycznie powinna odpowiadać za adresy, chociaż zastanawiam się czy przy tworzeniu web-aplikacji nie jest to gdzieś wyodrębnione i nie związane z jsf

0
  1. Ech. Jak sobie w web.xml wyspecyfikujesz zeby wszystkie zapytania do serwera na każdy adres obsługiwał servlet JSFa to JSF będzie od tej chwili odpowiadał za "adresy" (a to właśnie zrobiłeś!). Nie kopiuj bezmyślnie z tutoriali tylko próbuj zrozumieć co robisz.
  2. Nie ma czegoś takiego jak "domyślna implementacja". Jest najwyżej implementacja referencyjna i nic więcej. Są też implementacje których dostarczają serwery aplikacyjne, wtedy każdy serwer ma swoją "standardową" implementacje.
0

Z tym że na Twój problem odpowiada tutorial na oficjalnej stronie Javy i Mavena, polecam

0

@Shalom
Nigdy nie kopiuje bezmyślnie, zawsze coś zmieniam i sprawdzam jak będzie śmigało. Jesli chodzi o tutoriale, to zwykle dotycza one jednej rzeczy. Dogłębnie się nikt tam nie rozdrabnia co jak działa. Dlatego póki co tego wszystkiego nie wiem :P chciałbym się dowiedzieć jak wygląda od podstaw np moment kiedy ładuje się strona albo jeśli ktoś kliknie przycisk na stronie, co sie po kolei dzieje. Myślę, że to dość ważne bo często można przeanalizować i gdzieś w tych kolejnych krokach znaleźć rozwiązanie swojego problemu.
Ale jak mówiłem wczesniej - generalnie w tutorialach się nie rozdrabniaja, mam zrobić to to i to i działa. Dokładniejszego info jak przebiega np cały request przez całą aplikacje jak ktoś kliknie guzik to tam nie ma. Może gdzieś jest to wytłumaczone, a ja nie znalazłem, albo w jakiejś grubszej dokumentacji JSF? ;)

0

W dokumentacji JSF tego nie znajdziesz, bo JSF to przed tobą ukrywa. Może w takim razie warto poczytac co to jest servlet, co to jest filter i co się dzieje jak przychodzi request? ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1