Vérifier si un type de contenu est le bon...

Guillaume Clément · le 13/09/19 à 11:26

J'ai plusieurs type de contenu à afficher dans une application.

L'affichage d'un type se bpasse bien mais dès que je mets le deuxieme une erreur s'affiche la ou devrait s'afficher le premier.

Chose logique, il me dit grossomodo que le type n'est pas le bon... Normal ... avec quelle condition tester avant cette ligne si le type est le bon ?

<% CCPC19DemandesRPE obj = (CCPC19DemandesRPE)request.getAttribute(PortalManager.PORTAL_PUBLICATION); %>

Cette ligne qui est au début du gabarit fulldisplay.

 

Par avance merci

@ Bientôt

4 pts
Frédéric Touitou · le 16/09/19 à 15:23

Bonjour,

Puisque vous faites un cast Java ( (CCPC19DemandesRPE) Xxx ), il faut s'assurer au préalable que l'objet auquel il s'applique peut bien être "interprété" selon le type cible, via par exemple (JPlatform assurant que l'objet stocké dans l'attribut est une Publication) :

CCPC19DemandesRPE obj = null;   // Un nom plus parlant que "obj" serait bienvenu ici ;-)
Publication pub = request.getAttribute(PortalManager.PORTAL_PUBLICATION);

if (pub instanceof CCPC19DemandesRPE) {
  obj = (CCPC19DemandesRPE) pub;
} else {
  // Prendre ici une décision programmatique si le type n'est pas celui voulu...
// Peut-être un simple "return;", ou la gestion d'un autre type accepté par le gabarit ?
}

Si vous avez plusieurs types distincts à gérer dans le même gabarit (ce que je comprends de votre description), vous avez au moins ces deux possibilités :

  • Vous les gérez individuellement, pour en récupérer les différents attributs (pour l'affichage), à grand renfort de switch... case ou autres if... else ...
    • Bon courage pour la maintenance ! ?
  • Le mieux, si possible, serait de définir une Interface (au sens Java), dans laquelle seraient déclarées chacune des méthodes communes, nécessaires - notamment - à l'affichage : chacun des types hériterait alors de cette interface (JPlatform permet cela, dans l'onglet "Avancé" des "Propriétés" de l'IHM d'édition du type), et ainsi le cast, et tous les accesseurs de l'objet (à afficher) dans votre gabarit, porteraient uniquement sur cette interface commune...

J'espère que ces éléments pourront vous aider,

Bien cordialement.

#1

Dans mon cas c'est pour gérer l'affichage de différent type de contenu dans mon application.

donc j'ai écris ça :

<div class="app-body">
<%
Publication professionnalisation = (CCPC19RpeProfessionnalisation)request.getAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR);
Publication demande = (CCPC19DemandesRPE)request.getAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR);
Publication ficheAssMat = (CCPC19RpeFicheAssMat)request.getAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR);
Publication activites = (CCPC19RpeFicheActivite)request.getAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR);
Publication enfants = (CCPC19RpeFicheEnfant)request.getAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR);
%>
<%if (professionnalisation instanceof CCPC19RpeProfessionnalisation){%>
<%
request.setAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR, channel.getDataSet(CCPC19RpeProfessionnalisation.class));
request.setAttribute(AppConstants.BODY_INCLUDE_PATH_REQUEST_ATTR, "plugins/CCPC19PetiteEnfance/types/CCPC19RpeProfessionnalisation/doCCPC19RpeProfessionnalisationFullDisplay.jsp");
%>

<% } else if (demande instanceof CCPC19DemandesRPE) { %>
<%
request.setAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR, channel.getDataSet(CCPC19DemandesRPE.class));
request.setAttribute(AppConstants.BODY_INCLUDE_PATH_REQUEST_ATTR, "plugins/CCPC19PetiteEnfance/types/CCPC19DemandesRPE/doCCPC19DemandesRPEFullDisplay.jsp");
%>

<% } else if (ficheAssMat instanceof CCPC19RpeFicheAssMat){%>
<%
request.setAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR, channel.getDataSet(CCPC19RpeFicheAssMat.class));
request.setAttribute(AppConstants.BODY_INCLUDE_PATH_REQUEST_ATTR, "plugins/CCPC19PetiteEnfance/types/CCPC19RpeFicheAssMat/doCCPC19RpeFicheAssMatFullDisplay.jsp");
%>

<% } else if (activites instanceof CCPC19RpeFicheActivite){%>
<%
request.setAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR, channel.getDataSet(CCPC19RpeFicheActivite.class));
request.setAttribute(AppConstants.BODY_INCLUDE_PATH_REQUEST_ATTR, "plugins/CCPC19PetiteEnfance/types/CCPC19RpeFicheActivite/doCCPC19RpeFicheActiviteFullDisplay.jsp");
%>

<% } else if (enfants instanceof CCPC19RpeFicheEnfant){%>
<%
request.setAttribute(AppConstants.BODY_INCLUDE_PUB_REQUEST_ATTR, channel.getDataSet(CCPC19RpeFicheEnfant.class));
request.setAttribute(AppConstants.BODY_INCLUDE_PATH_REQUEST_ATTR, "plugins/CCPC19PetiteEnfance/types/CCPC19RpeFicheEnfant/doCCPC19RpeFicheEnfantFullDisplay.jsp");
%>

<%} else { %>
<jalios:include jsp="plugins/CCPC19PetiteEnfance/jsp/AppRPE/Affichages/mesTableaux_outilsDuRpe.jsp"/>
<% } %>

</div>

Chose étrange, c'est que j'avai testé avec 2 types et ça fonctionne... mais plus maintenant.

Guillaume Clément · le 17/09/19 à 10:05
0 pt