IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

MyFaces ignore immediate="true" avec Tiles 2.


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut MyFaces ignore immediate="true" avec Tiles 2.
    Bonjour,

    Je mets à jour une application MyFaces 1.1, Tomahawk 1.4 et Struts Tiles vers MyFaces 1.2.7, Tomahawk 1.1.9 et Tiles 2.1.0. L'application compile, se lance, affiche les pages... victoire ? Hélas non, car j'obtiens de méchantes exceptions en cliquant sur le bouton cancel de certaines pages. L'exception se produit dans l'un des accesseurs des beans des pages. Mais ces accesseurs n'auraient pas dû être appelés, car le bouton cancel est en fait un commandLink avec immediate="true".

    Je pense ne pas faire d'erreur sur le concept de base car l'application fonctionnait avant le changement de version et a été réalisée par plusieurs ingénieurs différents. D'une façon ou d'une autre, MyFaces ignore l'instruction immediate="true". Je soupçonne un bogue lié à la classe org.apache.myfaces.tomahawk.application.jsp.JspTilesTwoViewHandlerImpl de Tomahawk, censée garantir l'interropérabilité entre MyFaces 1.2 et Tiles 2, mais je ne suis sûr de rien.

    Quelqu'un a-t-il une idée ?

    Par ailleurs, j'ai essayé de contacter l'équipe d'Apache pour leur en parler mais le formulaire d'inscription de leur JIRA me répète "You must enter the text exactly as it appears in the picture." alors que je l'ai fait. 10 fois. Si quelqu'un connait un autre moyen de les contacter, ou peut les contacter lui-même, ne serait-ce que pour leur signaler le problème avec JIRA, merci de me faire signe.

    Merci d'avance,

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    J'ai testé en remplaçant Tiles 2 par les Facelets, et j'ai eu le même problème ! J'ai donc fait quatre projets de test.
    MyFaces seul fonctionne.
    Mojarra (l'implémentation Sun de JSF) seul fonctionne
    MyFaces et Facelets a le même problème.
    Mojarra et Facelets a le même problème!
    Ce dernier résultat m'a surpris, ma logique doit être incorrecte.

    Le projet de test consiste en un formulaire avec un champ texte prenant un nombre entier, un lien "ok" et un lien "cancel". Le lien cancel a l'attribut immediate à true, mais pas le lien ok. Donc cliquer sur ok devrait changer la valeur du champ, et cliquer sur cancel revenir à la valeur précédente.

    Mais quand j'utilise facelets, les deux liens mettent le formulaire à jour !

    Voilà le code du test MyFaces et Facelets.
    web.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>TestMojarraFacelets</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
      </context-param>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
      </servlet-mapping>
    </web-app>
    faces-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?xml version='1.0' encoding='UTF-8'?>
     
    <!DOCTYPE faces-config PUBLIC
      "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
      "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
     
    <faces-config>
    <application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
     </application>
     
    <managed-bean>
            <managed-bean-name>pageBean</managed-bean-name>
            <managed-bean-class>test4.PageBean</managed-bean-class>
            <managed-bean-scope>application</managed-bean-scope>
        </managed-bean>
     
    <navigation-rule>
      <from-view-id>/hello.jsp</from-view-id>
      <navigation-case>
        <from-outcome>self</from-outcome>
        <to-view-id>/hello.jsp</to-view-id>
      </navigation-case>
    </navigation-rule>
     
    </faces-config>
    hello.xhtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <!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:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html">
       <body>
          <f:view>
              <h:form id="aform">
             <h:inputText value="#{pageBean.intField}"/>
             <br />
             <h:commandLink action="#{pageBean.ok}" value="ok" />
             <br />
             <h:commandLink action="#{pageBean.cancel}" value="cancel" immediate="true" />
             </h:form>
          </f:view>
       </body>
    </html>
    index.jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:forward page="hello.jsf"/>
    PageBean.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    package test4;
     
    public class PageBean {
     
        private Integer intField = 13;
     
        public Integer getIntField() {
            return intField;
        }
     
        public void setIntField(Integer intField) {
            this.intField = intField;
        }
     
        public String ok() {
            return "self";
        }
     
        public String cancel() {
            return "self";
        }
    }
    J'espère que quelqu'un peut m'aider. Je peux envoyer les quatres projets si vous le vouler.

    Cordialement,

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo