JSF Kontextparameter Project Stage – Debugging


Der Parameter „Project Stage“ schaltet über die Werte „Development“ und „Production“ einige interne Optimierungen wie beispielsweise die Prüfung, ob neue xhtml Seiten compiliert werden müssen, ein oder aus (weitere Werte sind „SystemTest“, „UnitTest“).

<context-param>
    <param-name>javax.faces.validator.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

Auch eigene Auswertungen können hierüber gesteuert werden. Innerhalb von Java kann mit

Application.getProjectStage()

Auf den Wert zugegriffen werden. In xhtml Seiten kann der Wert z.B. zum rendern der Debug Informationen genutzt werden.

<ui:debug hotkey="L" rendered="#{facesContext.application.projectStage == 'Development'}" />

Nun möchte man allerdings im Allgemeinen keinen statischen Wert in der web.xml haben, sondern in Abhängigkeit von dem Build zwischen „Development“ und „Production“ umschalten. Hierfür definiert man Profile in Maven (integrations- und Release-Profile)

        <profile>
            <id>build-int</id>
            <properties>
                <jsfProjectStage>Development</jsfProjectStage>
            </properties>
        </profile>
	 
        <profile>
            <id>build-rel</id>
            <properties>
                <jsfProjectStage>Production</jsfProjectStage>
            </properties>
        </profile>

Diese definieren eine Variable mit der Stage Bezeichnung, die in der web.xml eingebunden wird

    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>${jsfProjectStage}</param-value>
    </context-param>

Als letzter Schritt fehlt nun noch, dass im maven-war-plugin die „Filterung“ eingeschaltet wird. Dieser hier etwas unglückliche Begriff führt dazu, dass Variablen in der web.xml ersetzt werden.

...
<webResources>
    <resource>
        <filtering>true</filtering>
        <directory>web/WEB-INF</directory>
        <targetPath>WEB-INF</targetPath>
        <includes>
            <include>**/web.xml</include>
        </includes>
        </resource>
...
,