ReferenceError: mojarra is not defined on Ubuntu 16.04 with Tomcat 8.5

98 Views Asked by At

I´m currently working on a JSF 2.2 webapplication. When it´s ready it should run on Ubuntu with Tomcat 8 but this currently seems like an impossible thing. I spend severall hours to fix the problem but I couldn´t find a solution. Here is all I know...

Webapplication works fine when:

Windows Server 2016 and Tomcat is used. (Only tested with version 9) CentOS 7 and Tomcat is used.(Only tested with version 8.5) Windows 7 and Pivotal tc Server v3.1 (Template: base-tomcat-7) which I use in Spring.

However the final destination of my application is an Ubuntu Server with Tomcat 8.5 installed. As the title of this post suggests this combination doesn´t work. At first the site loads as ususal but ajax calls do not work. Firefox and Chrome debug mode says "ReferenceError: mojarra is not defined" I decided to install one more VM. This time with Ubuntu 16.04 and Tomcat 8.5 to verify that Ubuntu couses the problem and indeed the same error occures. All the following information applies to that Ubuntu 16.04 VM.

I installed Tomcat two times. The first time I used this howto and the second time I used Synaptic to install everything for me. Same error with both tomcats.

Here is the index.xhtml File (Sorry for that german comments):

    <!DOCTYPE html>
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">

    <h:head>

    <title>Abwesenheitsnotiz</title>

    <f:facet name="styleStuff">
    <h:outputStylesheet library="css" name="style.css" rendered="true"
        target="head" />
    </f:facet>

    <!-- Favicon wird hier festgelegt. -->
    <link rel="shortcut icon" type="image/x-icon"
    href="#{resource['favicon/favicon.ico']}" />

    </h:head>
    <body>

   <!-- Deklaration der Variablen. -->
<ui:param name="delay" value="100" /> <!-- Verzögerung bis Autovervollständigungsfunktion der Autovervollständigung aufgerufen wird.-->
<ui:param name="minLength" value="2" /> <!-- Mindestlänge ab der die Autovervollständigungsfunktion aufgerufen wird, -->
<ui:param name="maxLength" value="60" /> <!-- Maximallänge eines Inputs bis dieser keine weiteren Zeichen mehr zulässt. -->

<!-- Übersetzung für PrimeFaces Kalender
https://stackoverflow.com/a/20842693 -->
<script type="text/javascript">
    PrimeFaces.locales['de'] = {
        closeText : 'Schließen',
        prevText : 'Zurück',
        nextText : 'Weiter',
        monthNames : [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
                'Juli', 'August', 'September', 'Oktober', 'November',
                'Dezember' ],
        monthNamesShort : [ 'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun',
                'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ],
        dayNames : [ 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch',
                'Donnerstag', 'Freitag', 'Samstag' ],
        dayNamesShort : [ 'Son', 'Mon', 'Die', 'Mit', 'Don', 'Fre', 'Sam' ],
        dayNamesMin : [ 'S', 'M', 'D', 'M ', 'D', 'F ', 'S' ],
        weekHeader : 'Woche',
        firstDay : 1,
        isRTL : false,
        showMonthAfterYear : false,
        yearSuffix : '',
        timeOnlyTitle : 'Nur Zeit',
        timeText : 'Zeit',
        hourText : 'Stunde',
        minuteText : 'Minute',
        secondText : 'Sekunde',
        currentText : 'Aktuelles Datum',
        ampm : false,
        month : 'Monat',
        week : 'Woche',
        day : 'Tag',
        allDayText : 'Ganzer Tag'
    };
</script> 

<!-- Alle Eingaben. -->
<DIV id="form">
    <f:view>
        <h:form>
            <h2>Aushang bei Abwesenheit</h2>
            <br />
                Der/Die Mitarbeiter(in)
                <p:autoComplete id="mitarbeiter"
                value="#{IndexBean.mitarbeiterName}"
                completeMethod="#{IndexBean.completeName}"
                minQueryLength="#{minLength}" maxlength="#{maxLength}"
                queryDelay="#{delay}" styleClass="PFautoComplete">
                <f:ajax event="itemSelect"
                    listener="#{IndexBean.findRoomAndGender(0)}" />
            </p:autoComplete>

            <h:panelGroup id="amVomBis">
                <h:panelGroup rendered="#{IndexBean.singleDay}">
                    ist <p:autoComplete id="am" value="#{IndexBean.am}"
                        completeMethod="#{IndexBean.completeAm}"
                        minQueryLength="#{minLength}" maxlength="#{maxLength}"
                        queryDelay="#{delay}" styleClass="PFautoComplete">
                    </p:autoComplete>
                nicht erreichbar. 
                    </h:panelGroup>
                <h:panelGroup rendered="#{!IndexBean.singleDay}">
                        ist vom
                        <p:calendar id="vom" value="#{IndexBean.vom}" maxlength="50"
                        navigator="true" pattern="dd.mm.yyyy" locale="de" />
                        bis
                        <p:calendar id="bis" value="#{IndexBean.bis}" maxlength="50"
                        navigator="true" pattern="dd.mm.yyyy" locale="de" />
                        nicht erreichbar. 
                    </h:panelGroup>
            </h:panelGroup>


            <!-- Anfang - Checkbox für Zeitauswahl anzeigen -->
            <label> <h:selectBooleanCheckbox id="CBtime"
                    value="#{IndexBean.singleDay}"
                    styleClass="JSFBooleanCheckboxforFallback">
                    <f:ajax event="valueChange" execute="CBtime"
                        render="CBtimeimg amVomBis" />
                </h:selectBooleanCheckbox> <h:panelGroup id="CBtimeimg">
                    <h:graphicImage class="CBfallbackimg" library="checkbox"
                        name="CBright.png" rendered="#{IndexBean.singleDay}" />
                    <h:graphicImage class="CBfallbackimg" library="checkbox"
                        name="CBleft.png" rendered="#{!IndexBean.singleDay}" />
                </h:panelGroup>
            </label>
            <!-- Ende - Checkbox für Zeitauswahl anzeigen -->
            <br />
            <br />


            <!-- 1. Zeile zur Vertretungsangabe. -->
            <h:panelGroup id="fallback1" rendered="true">
                Die Vertretung übernimmt: 
                <p:autoComplete id="vertretungsMitarbeiterName1"
                    value="#{IndexBean.vertretungsMitarbeiter1Name}"
                    completeMethod="#{IndexBean.completeName}"
                    minQueryLength="#{minLength}" maxlength="#{maxLength}"
                    queryDelay="#{delay}" styleClass="PFautoComplete">
                    <f:ajax event="itemSelect" execute="vertretungsMitarbeiterName1"
                        render="vertretungsMitarbeiterRaum1"
                        listener="#{IndexBean.findRoomAndGender(1)}" />
                </p:autoComplete>
                 Raum: 
                <h:panelGroup id="vertretungsMitarbeiterRaum1">
                    <p:autoComplete id="vertretungsMitarbeiterRaum1Autocomplete"
                        value="#{IndexBean.vertretungsMitarbeiter1Room}"
                        completeMethod="#{IndexBean.completeRoom}"
                        minQueryLength="#{minLength}" maxlength="#{maxLength}"
                        queryDelay="#{delay}" styleClass="PFautoComplete">
                    </p:autoComplete>
                </h:panelGroup>
                Thema:
                <p:autoComplete id="vertretungsMitarbeiterThema1"
                    value="#{IndexBean.vertretungsMitarbeiter1Thema}"
                    completeMethod="#{IndexBean.completeTopic}"
                    minQueryLength="#{minLength}" maxlength="#{maxLength}"
                    queryDelay="#{delay}" styleClass="PFautoComplete">
                </p:autoComplete>


                <!-- Anfang - Checkbox für Vertretung 2 anzeigen -->
                <label> <h:selectBooleanCheckbox id="CBfallback1"
                        value="#{IndexBean.fallback2}"
                        styleClass="JSFBooleanCheckboxforFallback">
                        <f:ajax event="valueChange" execute="CBfallback1"
                            render="CBfallback1img fallback2 fallback3" />
                    </h:selectBooleanCheckbox> <h:panelGroup id="CBfallback1img">
                        <h:graphicImage class="CBfallbackimg" library="checkbox"
                            name="CBup.png" rendered="#{IndexBean.fallback2}" />
                        <h:graphicImage class="CBfallbackimg" library="checkbox"
                            name="CBdown.png" rendered="#{!IndexBean.fallback2}" />
                    </h:panelGroup>
                </label>
                <!-- Ende - Checkbox für Vertretung 2 anzeigen -->

                <br />
                <br />
            </h:panelGroup>


            <!-- 2. Zeile zur Vertretungsangabe. -->
            <h:panelGroup id="fallback2">
                <h:panelGroup rendered="#{IndexBean.fallback2}">
                    Die Vertretung übernimmt: 
                <p:autoComplete id="vertretungsMitarbeiterName2"
                        value="#{IndexBean.vertretungsMitarbeiter2Name}"
                        completeMethod="#{IndexBean.completeName}"
                        minQueryLength="#{minLength}" maxlength="#{maxLength}"
                        queryDelay="#{delay}" styleClass="PFautoComplete">
                        <f:ajax event="itemSelect" execute="vertretungsMitarbeiterName2"
                            render="vertretungsMitarbeiterRaum2"
                            listener="#{IndexBean.findRoomAndGender(2)}" />
                    </p:autoComplete>
                 Raum: 
                <h:panelGroup id="vertretungsMitarbeiterRaum2">
                        <p:autoComplete id="vertretungsMitarbeiterRaum2Autocomplete"
                            value="#{IndexBean.vertretungsMitarbeiter2Room}"
                            completeMethod="#{IndexBean.completeRoom}"
                            minQueryLength="#{minLength}" maxlength="#{maxLength}"
                            queryDelay="#{delay}" styleClass="PFautoComplete">
                        </p:autoComplete>
                    </h:panelGroup>
                Thema:
                <p:autoComplete id="vertretungsMitarbeiterThema2"
                        value="#{IndexBean.vertretungsMitarbeiter2Thema}"
                        completeMethod="#{IndexBean.completeTopic}"
                        minQueryLength="#{minLength}" maxlength="#{maxLength}"
                        queryDelay="#{delay}" styleClass="PFautoComplete">
                    </p:autoComplete>

                    <!-- Anfang - Checkbox für Vertretung 3 anzeigen -->
                    <label> <h:selectBooleanCheckbox id="CBfallback2"
                            value="#{IndexBean.fallback3}"
                            styleClass="JSFBooleanCheckboxforFallback">
                            <f:ajax event="valueChange" execute="CBfallback2"
                                render="CBfallback2img fallback3" />
                        </h:selectBooleanCheckbox> <h:panelGroup id="CBfallback2img">
                            <h:graphicImage class="CBfallbackimg" library="checkbox"
                                name="CBup.png" rendered="#{IndexBean.fallback3}" />
                            <h:graphicImage class="CBfallbackimg" library="checkbox"
                                name="CBdown.png" rendered="#{!IndexBean.fallback3}" />
                        </h:panelGroup>
                    </label>
                    <!-- Ende - Checkbox für Vertretung 3 anzeigen -->

                    <br />
                    <br />
                </h:panelGroup>
            </h:panelGroup>


            <!-- 3. Zeile zur Vertretungsangabe. -->
            <h:panelGroup id="fallback3">
                <h:panelGroup rendered="#{IndexBean.fallback3}">
                    Die Vertretung übernimmt: 
                <p:autoComplete id="vertretungsMitarbeiterName3"
                        value="#{IndexBean.vertretungsMitarbeiter3Name}"
                        completeMethod="#{IndexBean.completeName}"
                        minQueryLength="#{minLength}" maxlength="#{maxLength}"
                        queryDelay="#{delay}" styleClass="PFautoComplete">
                        <f:ajax event="itemSelect" execute="vertretungsMitarbeiterName3"
                            render="vertretungsMitarbeiterRaum3"
                            listener="#{IndexBean.findRoomAndGender(3)}" />
                    </p:autoComplete>
                 Raum: 
                <h:panelGroup id="vertretungsMitarbeiterRaum3">
                        <p:autoComplete id="vertretungsMitarbeiterRaum3Autocomplete"
                            value="#{IndexBean.vertretungsMitarbeiter3Room}"
                            completeMethod="#{IndexBean.completeRoom}"
                            minQueryLength="#{minLength}" maxlength="#{maxLength}"
                            queryDelay="#{delay}" styleClass="PFautoComplete">
                        </p:autoComplete>
                    </h:panelGroup>
                Thema:
                <p:autoComplete id="vertretungsMitarbeiterThema3"
                        value="#{IndexBean.vertretungsMitarbeiter3Thema}"
                        completeMethod="#{IndexBean.completeTopic}"
                        minQueryLength="#{minLength}" maxlength="#{maxLength}"
                        queryDelay="#{delay}" styleClass="PFautoComplete">
                    </p:autoComplete>

                    <!-- Anfang - Checkbox um richtige Einrückung zu gewährleisten -->
                    <!-- Die Checkbox hat KEINE funktion! -->
                    <label> <h:selectBooleanCheckbox
                            styleClass="JSFBooleanCheckboxforFallback">
                        </h:selectBooleanCheckbox> <h:panelGroup>
                            <h:graphicImage class="CBfallbackimg" library="checkbox"
                                name="invisible.png" rendered="#{IndexBean.fallback3}" />
                            <h:graphicImage class="CBfallbackimg" library="checkbox"
                                name="invisible.png" rendered="#{!IndexBean.fallback3}" />
                        </h:panelGroup>
                    </label>
                    <!-- Ende - Checkbox um richtige Einrückung zu gewährleisten -->
                    <br />
                    <br />
                </h:panelGroup>
            </h:panelGroup>


            <!-- Optionen für die PDF-Erstellung. -->
            <!-- Checkbox für "Rückseite erstellen?" -->
            <label> Rückseite erstellen? <h:selectBooleanCheckbox
                    id="CB1" value="#{IndexBean.announcementOnBack}"
                    styleClass="JSFBooleanCheckbox">
                    <f:ajax event="valueChange" execute="CB1" render="CB1img" />
                </h:selectBooleanCheckbox> <h:panelGroup id="CB1img">
                    <h:graphicImage class="CBimg" library="checkbox"
                        name="checked.png" rendered="#{IndexBean.announcementOnBack}" />
                    <h:graphicImage class="CBimg" library="checkbox"
                        name="unchecked.png" rendered="#{!IndexBean.announcementOnBack}" />
                </h:panelGroup>
            </label>

            <!-- Checkbox für "Faltlinie erstellen?" -->
            <label> / Faltlinie erstellen? <h:selectBooleanCheckbox
                    id="CB2" value="#{IndexBean.cutLine}"
                    styleClass="JSFBooleanCheckbox">
                    <f:ajax event="valueChange" execute="CB2" render="CB2img" />
                </h:selectBooleanCheckbox> <h:panelGroup id="CB2img">
                    <h:graphicImage class="CBimg" library="checkbox"
                        name="checked.png" rendered="#{IndexBean.cutLine}" />
                    <h:graphicImage class="CBimg" library="checkbox"
                        name="unchecked.png" rendered="#{!IndexBean.cutLine}" />
                </h:panelGroup>
            </label>

            <!-- Checkbox für "Ausrichtung hochkant?" -->
            <label> / Aushang Groß? <h:selectBooleanCheckbox id="CB3"
                    value="#{IndexBean.pageformatIsPortrait}"
                    styleClass="JSFBooleanCheckbox">
                    <f:ajax event="valueChange" execute="CB3" render="CB3img" />
                </h:selectBooleanCheckbox> <h:panelGroup id="CB3img">
                    <h:graphicImage class="CBimg" library="checkbox"
                        name="checked.png" rendered="#{IndexBean.pageformatIsPortrait}" />
                    <h:graphicImage class="CBimg" library="checkbox"
                        name="unchecked.png"
                        rendered="#{!IndexBean.pageformatIsPortrait}" />
                </h:panelGroup>
            </label>

            <br />
            <br />

            <!-- Button zum erstellen des PDF Dokuments -->
            <h:commandButton id="submit" action="#{IndexBean.submit}" value="PDF erstellen."
                styleClass="JSFCommandButton" />
        </h:form>
    </f:view>
</DIV>

<!-- Untere rote Box. -->
<DIV id="content">
    <h:form>
        <!-- Anfang Checkbox für "Cookies verwenden?" -->
        <label> Cookies verwenden? <h:selectBooleanCheckbox id="CB4"
                value="#{IndexBean.useCookies}" styleClass="JSFBooleanCheckbox">
                <f:ajax event="valueChange" execute="CB4" render="CB4img" />
            </h:selectBooleanCheckbox> <h:panelGroup id="CB4img">
                <h:graphicImage class="CBimg" library="checkbox" name="checked.png"
                    rendered="#{IndexBean.useCookies}" />
                <h:graphicImage class="CBimg" library="checkbox"
                    name="unchecked.png" rendered="#{!IndexBean.useCookies}" />
            </h:panelGroup>
        </label>
        <!-- Ende Checkbox für "Cookies verwenden?" -->
    </h:form>

    <p>
        Support: My Name<br /> Stand: 31.08.2017
    </p>
    <script type="text/javascript">
        var is_firefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
        if (is_firefox) { document.write('<p>Hinweis: Wenn Firefox verwendet wird und das PDF Dokument im Querformat ist, muss die Druckeinstellung manuell auf Querformat umgestellt werden.</p>');
        }

        var is_chrome = !!window.chrome;
        if (is_chrome) {document.write('<p>Hinweis: Wenn Chrome verwendet wird sollte die größe des Drucks manuell auf 100% gesetzt werden.</p>');
        }
    </script> 
</DIV>

Now there is one very interesting thing i noticed! I will now post the html files that the server generates on two different operating systems.

At this stage of writing this I noticed that it is hard to get big chunks of code display right so I will just describe what happends. As you see here the server adds a javascript named jsf.js.

<head id="j_idt2"><link type="text/css" rel="stylesheet" href="/Abwesenheitsnotiz/javax.faces.resource/theme.css.xhtml?ln=primefaces-aristo" /><link type="text/css" rel="stylesheet" href="/Abwesenheitsnotiz/javax.faces.resource/style.css.xhtml?ln=css" /><link type="text/css" rel="stylesheet" href="/Abwesenheitsnotiz/javax.faces.resource/components.css.xhtml?ln=primefaces&amp;v=6.1" /><script type="text/javascript" src="/Abwesenheitsnotiz/javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces&amp;v=6.1"></script><script type="text/javascript" src="/Abwesenheitsnotiz/javax.faces.resource/jquery/jquery-plugins.js.xhtml?ln=primefaces&amp;v=6.1"></script><script type="text/javascript" src="/Abwesenheitsnotiz/javax.faces.resource/core.js.xhtml?ln=primefaces&amp;v=6.1"></script><script type="text/javascript" src="/Abwesenheitsnotiz/javax.faces.resource/components.js.xhtml?ln=primefaces&amp;v=6.1"></script><script type="text/javascript" src="/Abwesenheitsnotiz/javax.faces.resource/jsf.js.xhtml?ln=javax.faces"></script><script type="text/javascript">if(window.PrimeFaces){PrimeFaces.settings.locale='de_DE';}</script>

<title>Abwesenheitsnotiz</title>

<!-- Favicon wird hier festgelegt. -->
<link rel="shortcut icon" type="image/x-icon" href="/Abwesenheitsnotiz/javax.faces.resource/favicon/favicon.ico.xhtml" /></head>

The code shown here is the same on every OS but the jsf.js script is different on Ubuntu than on every other OS.

One possible place where the error occures is clicking on this lable where mojarra.ab() is called.

<label><input id="j_idt8:CBtime" type="checkbox" name="j_idt8:CBtime" class="JSFBooleanCheckboxforFallback" onclick="mojarra.ab(this,event,'valueChange','j_idt8:CBtime','j_idt8:CBtimeimg j_idt8:amVomBis')" /><span id="j_idt8:CBtimeimg"><img src="/Abwesenheitsnotiz14/javax.faces.resource/CBleft.png.xhtml;jsessionid=72871425F9B76ADFBB95BABB209BE36E?ln=checkbox" class="CBfallbackimg" /></span>
            </label>

the jsf.js script on Ubuntu doesn´t contain mojarra.ab() but every othe script on Windows, CentOS, etc. does. Why does this happen?

Finally here is the 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>xxx</groupId>
<artifactId>Abwesenheitsnotiz</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Abwesenheitsnotiz Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
    <javaVersion>1.8</javaVersion>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-
8</project.reporting.outputEncoding>
</properties>
<developers>
    <developer>
        <id>xxx</id>
        <name>xxx</name>
        <email>lxxx</email>
    </developer>
  </developers>
  <dependencies>
    <dependency>
        <groupId>qoppa.jPDF.writer</groupId>
        <artifactId>jPDFWriter</artifactId>
        <version>1.03</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.primefaces/primefaces -->
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>6.1</version>
    </dependency>
    <!-- 
    https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java 
    -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.5.2</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-api -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.14</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-impl -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.14</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.myfaces.core/myfaces-
    api -->
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version>2.2.12</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api 
    --> 
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.7</version>
        <scope>test</scope>
    </dependency>
    </dependencies>
    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
            <version>3.6.1</version>
        </plugin>
    </plugins>
    <finalName>Abwesenheitsnotiz</finalName>
    </build>
    </project>

Edit:

This question was marked as dublicate. I read through the link and found the solution to the problem. If someone ever facing the same problem remove the following dependency.

<dependency>
    <groupId>org.apache.myfaces.core</groupId>
    <artifactId>myfaces-api</artifactId>
    <version>2.2.12</version>
</dependency>
0

There are 0 best solutions below