mardi 17 juin 2014

Erreurs lors de la migration Icefaces 3 et JSF 2.0

Petit Récap des érreurs rencontré lors de la migration vers Icefaces 3

liens utiles : Migration icefaces 1.8 vers icefaces 3.0

La ressource demandée (page.jsp) n'est pas disponible.


Renommer la page concerné ici : page.jsp en page.xhtml


Erreur avec le scope

javax.servlet.error.request_uri: page.jsf
javax.servlet.error.exception: javax.faces.view.facelets.TagAttributeException: /pages/page.xhtml @28,45 test="#{objetFormBean.editMode}" Impossible de creer le bean . Les problemes suivants ont été détectés: - The scope of the referenced object: #{param.objectid} is shorter than the referring object 

Rajouter metadata et viewparam dans la page concerné entre <f :view> et <ice :form>

<f:metadata>
   <f:viewParam name="objectid" value="#{objetFormBean.objectid }"/>
</f:metadata>

Dans face-config supprimer la partie :

 <managed-property>
   <property-name>objectid</property-name>
   <value>#{param.objectid}</value>
  </managed-property>
qui ce trouve dans le managed-bean en question

Eror : InputFile

javax.servlet.error.exception: javax.faces page.xhtml @138,39 Tag Library supports namespace: http://www.icesoft.com/icefaces/component, but no tag was defined for name: inputFile

Rajouter la lib iceface-ace

<ice:inputFile> devient : <ace:fileEntry>


Exemple :

<html ...xmlns:ace="http://www.icefaces.org/icefaces/components"">
......

<ace:fileEntry id="fileEntryComp" 
relativePath="/upload/"
fileEntryListener="#{documentBean.uploadAction}"
useOriginalFilename="true"/>
 <h:commandButton id="submit" type="submit" value="Send File"/>

ici, documentBean.uploadAction apel la focntion qui gére l'envoi du fichier et le commandButton permet l'affichage d'un bouton d'upload (necessaire)

la fonction upload :

public void uploadAction(FileEntryEvent event) {
       FileEntry fileEntry = (FileEntry) event.getSource();
       FileEntryResults results = fileEntry.getResults();
       for (FileEntryResults.FileInfo fileInfo : results.getFiles())
       {
           if (fileInfo.isSaved())
           {
            documentForm.setFile(fileInfo.getFile());
            getDocumentForm().setFileName(fileInfo.getFileName());
            documentForm.setContentType(fileInfo.getContentType());
    documentForm.setTempFile(true);
    try {
    documentForm.setFilePath(documentForm.getFile()
    .getCanonicalPath());
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
           }
       }
   }

Plus d’infos sur cette page

Erreur conflit d’ID

 Component ID editObjetForm:j_idt54:0:dataScroll_Page has already been found in the view. See below for details.

Des ID sont en conflit verifier les ID de la page concerné, ici nous avons effectuer les changement suivants :

Supression de  id="dataScroll_Elect" dans popupTest.xhtml ainsi que dans test.xhtml


Erreur avec la mise en page

/!\ si un affichage ne ce comporte pas comme prevu (exemple : un menu qui occupe trop de place) pensez à vérifier votre CSS, par exemple j'ai eu plusieurs fois un problème de menu à cause d'une majuscule (topmenu -> topMenu) cela marcher trés bien avant et lors de la migration ce problème est survenu, je n'en connais pas la cause /!\

<ice:dataTable> dans la version 1.8 on pouvait écrire ce genre d'attribut : scrollHeight="200" 
maintenant il est ncessaire de préciser : scrollHeight="200px" 

<ice:panelGrid> cette balise n'existe plus, pour ma part je me suis contenté de la supprimer de mon code.Si toute fois cela ne vous convient pas il existe maintenant le <ace:panel> dont voici les attributs : http://res.icesoft.org/docs/v3_latest/ace/tld/ace/panel.html

Problème avec h:panelGrid

lrosque j'ai effectuer cette migration j'ai eu un probléme d'affiche de tableau.

<h:panelGrid id="panel2" columns="3" border="1" columnClasses="panel2css" bgcolor="CCCCCC">
ce code était censer m'afficher un tableau (dans un tableau principale d'ou panel2) de 3 colonnes avec toutes les 3 la même dimension (défini dans le css panel2css), or les dimension souhaité ne s'appliquer que sur la première colonne.
Aprés quelques recherches il semblerait que l'attribut columnClasses est changé. En effet il est desormais nécessaire de préciser le style voulu pour chaque colonnes. le code devient donc :

<h:panelGrid id="panel2" columns="3" border="1" columnClasses="panel2css,panel2css,panel2css" bgcolor="CCCCCC">


Erreur UIData


Caused by: javax.el.ELException: /WEB-INF/facelets/tags/installs.xhtml @68,55 value="#{installsLOVBean.objects}": Error reading 'objects' on type test.testac.gui.mbean.lov.InstallsLOVBean
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIData.getValue(UIData.java:730)
at com.icesoft.faces.component.panelseries.UISeries.getValue(UISeries.java:62)
... 42 more
Caused by: java.lang.IllegalArgumentException: could not find UIData referenced by attribute dataScroller@for = ' '

L'attribut for des balises <l:dataPaginatorFin> et <l:dataPaginatorDebut> devient forPaginator


Les Popups

Si votre popup ne s'affichent pas vérifier les point suivants :

-votre showPopup est bien mis a true
-votre action pointe au bonne endroit
-l'afficahge de la popup est présent dans la page.

Pour ma part tout était bon sauf le troisiéme point j'ai donc du rajouter simplement une balise de ce type :

<l:popupMaudite />


a la fin de ma page xhtml

network connection interrupted

Si vous avez cette popup qui apparait sans raisons (par exemple dans mon cas elle apparaissait à chaque enregistrement/update d'un objet)

voici comment régler le problème : (Même si je ne pense pas qu'en soit le problème soit réglé, cela permet tout de même de ne plus voir cette méchante popup)


Il vous suffit de rajouter ce param dans votre web.xml :

    <context-param>
        <param-name>org.icefaces.disableDefaultErrorPopups</param-name>
        <param-value>true</param-value>
    </context-param>