JEE JavaServer Faces/fr

De Wiki de Romain RUDIGER
Aller à : navigation, rechercher
Langue : English  • français

Faces Servlet Mapping

Il existe deux solutions pour faire passer ses pages par le Faces Servlet :

  • suffix mapping : par rapport à l'extension du fichier,
  • prefix mapping : par rapport au dossier source.

Première solution, déclaration dans le web.xml :

<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>/faces/*</url-pattern><!-- All requests on this folder are mapping on FacesServlet -->
</servlet-mapping>

Si vous avez donc un fichier index.jsp dans le dossier /installation/index.jsp, il faut pour y accéder au travers du Faces Servlet appelez l'url : http://localhost:port/apppli-context/faces/installation/index.jsp


Seconde solution, déclaration dans le web.xml :

<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>/*.jsf</url-pattern><!-- All jsf pages are mapping on FacesServlet -->
</servlet-mapping>

Si vous avez donc un fichier index.jsf dans le dossier /installation/index.jsf, il faut pour y accéder au travers du Faces Servlet appelez l'url : http://localhost:port/apppli-context/installation/index.jsp

navigation-rule

Règles de navigation, si tel action alors afficher telle page.

Dans le fichier faces-config.xml, pour regiriger l'utilisateur de la page /userManagement/new.jsp à /index.jsp en cas d'action "index" :

<navigation-rule>
    <from-view-id>/userManagement/new.jsp</from-view-id>
    <navigation-case>
        <from-outcome>index</from-outcome>
        <to-view-id>/index.jsp</to-view-id>
    </navigation-case>
</navigation-rule>

Pour le fichier /userManagement/new.jsp :

<f:view>
    <h:form>
        <h:commandButton action="index" value="Index" />
    </h:form>
</f:view>

Il est possible d'omettre la partie <from-view-id>, dans ce cas la toutes les actions index seront redirigées vers /index.jsp.

Exemples

<rich:dataTable>

Utilisation d'un objet <rich:dataTable> avec une fonction de filtrage sur la première colonne. Ce tableau est multidimensionnel puisqu'il y a une autre liste de valeurs avec l'utilisation d'un objet <a4j:repeat> mais ceci est possible avec un <h:dataTable>.

Pour plus d'information voir : The BalusC Code: Using datatables.

<rich:dataTable id="userTable" onRowMouseOver="this.style.backgroundColor='#F1F1F1'"  
  onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" 
  binding="#{userEntity.userTable}" value='#{userEntity.userList}' var='item' 
  columnClasses="center" rows="15" reRender="ds">
    <f:facet name="header">
        <h:outputText value="#{bundle.userManagement_list_title}"/>
    </f:facet>
    <rich:column sortBy="#{item.userid}" breakBefore="true">
        <f:facet name="header">
            <h:outputText value="#{bundle.userManagement_userid}"/>
        </f:facet>
        <h:outputText value=" #{item.userid}"/>
    </rich:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="#{bundle.userManagement_courriel}"/>
        </f:facet>
        <h:outputText value=" #{item.courriel}"/>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="#{bundle.userManagement_groups}"/>
        </f:facet>
        <ul style="list-style-type:none;margin:0;padding:0;">
            <a4j:repeat value='#{userEntity.groupsByUserid}' var='item'>
                <li>
                    <h:outputText value=" #{item.groupEntityPK.groupid}"/>
                </li>
            </a4j:repeat>
        </ul>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText escape="false" value="&nbsp;"/>
        </f:facet>
        <h:commandButton action="#{userEntity.editUserForm}" image="/img/edit22.png" alt="#{bundle.userManagement_user_edit}"/>

        <h:commandButton action="#{userEntity.removeUserForm}" image="/img/delete22.png" alt="#{bundle.userManagement_user_remove}"/>
    </h:column>
    <f:facet name="footer">
        <rich:datascroller id="userTable"></rich:datascroller>
    </f:facet>
</rich:dataTable>
<h:commandButton action="#{userEntity.createForm}" image="/img/adduser22.png" alt="#{bundle.userManagement_user_add}"/>
&nbsp;
<a4j:commandButton action="#{userEntity.refresh}" image="/img/refresh22.png" alt="#{bundle.userManagement_refresh}" reRender="UserManagement"/>

<rich:poll>

Fait une requête en Ajax toutes les x secondes et met à jour la page. Dans cet exemple il y a l'utilisation d'un itérateur sur une liste (<a4j:repeat>).

<h:panelGroup id="LightView">
    <h:form id="LightViewPoll">
        <a4j:poll id="poll" interval="#{main.pollInterval}" enabled="#{main.pollEnabled}" reRender="lightsStatus" />
    </h:form>
    <h:form id="LightViewForm">
        <div id="HRlist">
            <ul>
                <a4j:repeat id="lightsStatus" value="#{lightsStatus.lightList}" var="light" binding="#{lightsStatus.repeater}">
                    <li>
                        <rich:panel header="#{light.name}" bodyClass="lightsStatusBody">
                            <h:outputText value="#{light.status}"/>
                            <br/>
                            <a4j:commandButton value="switch on" action="#{lightsStatus.switchOn}" rendered="#{lightsStatus.canSwitchOn}"/>
                            <a4j:commandButton value="switch off" action="#{lightsStatus.switchOff}" rendered="#{not lightsStatus.canSwitchOn}"/>
                        </rich:panel>
                    </li>
                </a4j:repeat>
            </ul>
        </div>
    </h:form>
</h:panelGroup>