Le < t: message > ne s'affiche pas correctement lors de l'utilisation de < t: inputFileUpload > à l'intérieur de < t: PanelTabbedPane >

StackOverflow https://stackoverflow.com/questions/66912

  •  09-06-2019
  •  | 
  •  

Question

Dans une page JSP, j'ai créé un < h: form enctype = "multipart / form-data "" > avec quelques éléments: < t: inputText > , < t: inputDate > , etc. J'ai également ajouté du < t: message for = " some & item " > . Et je voulais autoriser le L'utilisateur télécharge plusieurs fichiers (un à la fois) dans le formulaire (à l'aide de < t: inputFileUpload > ). À ce stade, mon code fonctionne correctement.

Le mal de tête survient lorsque j'essaie de placer le formulaire dans un & panel: panelTabbedPane serverSideTabSwitch = "faux", > (et donc bien sûr, dans un < t: panelTab > )

J'ai copié la structure indiquée dans le code source de l'exemple TabbedPane à partir de Exemples de Tomahawk , en utilisant la balise < f: sous-vue > et en plaçant la balise panelTab dans une nouvelle page jsp (en utilisant < jsp: include page = "somePage.jsp " > directive)

Tout d’abord, le < t: inputFileUpload > ne parvient pas à charger le fichier à la valeur attribuée à l’attribut Managed Bean Managed Upload # {myBean.upFile}

Ensuite, googler pour un indice , Je savais que < t: panelTabbedPane > générait un formulaire appelé "autoform", ce qui me permettait d'obtenir des formulaires imbriqués. Ok, j'ai corrigé que la création du < h: form > à partir du < t: panelTabbedPane > et de eureka! entrée de fichier a travaillé à nouveau! (l'autoform ne génère pas)

Mais, oh surprise! oh terrible loi Murphy! Tous mes < h: message > commencent à échouer. La sortie de la console Eclipse indique que tous les < t: message > recherchent des ID d'éléments non existants (ceux dont l'identifiant est en partie égal à ce qu'ils recherchent, mais à la fin de l'identifiant, leurs noms changer)

À ce stade, je mets une balise < t: mesagges > (notez le "s" à la fin) pour afficher toutes les erreurs de validation en même temps au début du panneau, et ça marche bien. Il existe donc des erreurs de validation qui s’affichent correctement au début du Panel.

Tous les messages d'erreur de validation générés dans cette page sont les messages de validation intégrés à JSF. Le support en ce moment n'a pas de validateurs définis.

& # 191; Comment puis-je obtenir le < t: message pour = & x; xyz " > qui fonctionne correctement?

J'utilise Tomahawk-1.1.6 avec myFaces-impl-1.2.3 dans un projet Ganymede d'éclipse avec Geronimo en tant que serveur d'applications (Geronimo me donne l'implémentation du fichier myFaces pendant que je mets le fichier tomahawk dans le fichier WEB-INF / dossier lib de l'application)

"Résolu": ce problème est signalé au forum myFaces.

Merci à Kyle Renfro pour sa réponse et ses informations. (Bon travail Kyle!) Voir le problème

MODIFIER 1

1.- Merci à Kyle Renfro pour sa réponse rapide. L'attribut forceID utilisé dans l'élément input ne fonctionne pas pour la première fois, mais avec des ajustements très délicats, je pourrais utiliser les balises < t: message for = "xyz", > .

Ce que j'ai fait était:
1. Avoir ma balise < inputText id = " name " forceId = " true " required = " true " > Le < t: message > ne fonctionne pas.
2. Ensuite, après avoir consulté les messages d'erreur sur la console eclipse, j'ai renommé mon "id". Attribuez à cela: < inputText id = & <;> namej_id_1 " forceId = " true " required = " true " >
3. Ensuite, le < t: message > a fonctionné! mais après avoir appuyé sur les boutons " Soumettre " bouton de la forme la deuxième fois. & # 161; La deuxième fois! (Je soupçonne que quelque chose se passe au cycle de vie de JSF)

4. Cela implique que l'utilisateur doit appuyer 2 fois sur le bouton d'envoi pour obtenir les messages d'erreur sur la page.
5. Et en utilisant le " j_id_1 " phrase à la fin des ID est très étrange.

EDIT 2

Ok, voici le code, espérons que ce ne soit pas gênant.

1.- mainPage.jsp (voici les balises < t: panelTabbedPane > et < f: sous-vue > )

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>  
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>  
<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk"%>  
<html>  
<body>  
<f:view>  
<h:form enctype="multipart/form-data">  
<t:panelTabbedPane serverSideTabSwitch="false" >  

            <f:subview id="subview_tab_detail">  
                <jsp:include page="detail.jsp"/>  
            </f:subview>  

        </t:panelTabbedPane>  
    </h:form>  

</f:view>  
</body>  
</html>  


2.- detail.jsp (voici la balise < t: panelTab > )

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>  
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>  
<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk"%>  

<t:panelTab label="TAB_1">  
        <t:panelGrid columns="3">  
            <f:facet name="header">  
                <h:outputText value="CREATING A TICKET" />  
            </f:facet>  

            <t:outputLabel for="ticket_id" value="TICKET ID" />  
            <t:inputText id="ticket_id" value="#{myBean.ticketId}" required="true" />  
            <t:message for="ticket_id" />  

            <t:outputLabel for="description" value="DESCRIPTION" />  
            <t:inputText id="description" value="#{myBean.ticketDescription}" required="true" />
            <t:message for="description" />  

            <t:outputLabel for="attachment" value="ATTACHMENTS" />  
            <t:panelGroup>  
                <!-- This is for listing multiple file uploads -->  
                <!-- The panelGrid binding make attachment list grow as the user inputs several files (one at a time) -->  
                <t:panelGrid columns="3" binding="#{myBean.panelUpload}" />  
                <t:inputFileUpload id="attachment"  value="#{myBean.upFile}" storage="file" />  
                <t:commandButton value="ADD FILE" action="#{myBean.upload}" />  
            </t:panelGroup>  
            <t:message for="attachment" />  

            <t:commandButton action="#{myBean.create}" value="CREATE TICKET" />  
        </t:panelGrid>  
</t:panelTab>  

EDIT 3

En réponse au suivi de Kyle Renfro:

  

Kyle dit:

     
    

"Dans la première vue de la page, appuyez sur le bouton" CRÉER UN TICKET ". bouton avec aucun des inputTexts et aucun fichier téléchargé, les balises de message fonctionnent-elles pour les inputTexts? (c.-à-d. requis = vrai) Je suis juste curieux de savoir si les messages pour les inputTexts fonctionnent mais le message pour le inputFileUpload ne l'est pas. "

  

Voici le comportement trouvé:
1.- Aucun message d'erreur de validation ne s'affiche (les balises de message ne fonctionnent pas) Même lorsque j'essaie de tester un seul message d'erreur de validation (par exemple, en testant le message pour le premier texte saisi), aucun d'eux ne s'affiche. .
2.- La console eclipse me montre ces erreurs internes:

ERROR [HtmlMessageRendererBase] Could not render Message. Unable to find component 'ticket_id' (calling findComponent on component 'j_id_jsp_1383779881_1:subview_tab_detail:j_id_jsp_1716158401_0j_id_1:j_id_jsp_1716158401_5j_id_1'). If the provided id was correct, wrap the message and its component into an h:panelGroup or h:panelGrid.  
ERROR [HtmlMessageRendererBase] Could not render Message. Unable to find component 'description' (calling findComponent on component 'j_id_jsp_1383779881_1:subview_tab_detail:j_id_jsp_1716158401_0j_id_1:j_id_jsp_1716158401_8j_id_1'). If the provided id was correct, wrap the message and its component into an h:panelGroup or h:panelGrid.  
ERROR [HtmlMessageRendererBase] Could not render Message. Unable to find component 'attachment' (calling findComponent on component 'j_id_jsp_1383779881_1:subview_tab_detail:j_id_jsp_1716158401_0j_id_1:j_id_jsp_1716158401_14j_id_1'). If the provided id was correct, wrap the message and its component into an h:panelGroup or h:panelGrid.  

C’est ici que j’ai vu le mot "j_id_1" au niveau des identifiants générés, par exemple pour l’ID "ticket_id":

j_id_jsp_1383779881_1:subview_tab_detail:j_id_jsp_1716158401_0j_id_1:j_id_jsp_1716158401_5j_id_1

Et, en consultant la page HTML générée, j'ai constaté que les noms des identifiants ressemblaient à ceci (sans utiliser "ForceId"):

<input id="j_id_jsp_1383779881_1:subview_tab_detail:j_id_jsp_1716158401_0j_id_1:ticket_idj_id_1" name="j_id_jsp_1383779881_1:subview_tab_detail:j_id_jsp_1716158401_0j_id_1:ticket_idj_id_1">  
Était-ce utile?

La solution

On dirait qu’il pourrait être lié à un bug dans myfaces. Il existe une version plus récente de myfaces et de tomahawk que vous pourriez essayer. Je voudrais supprimer la fonctionnalité de sous-vue à titre de test rapide: recopiez la page detail.jsp dans la page principale.

https://issues.apache.org/jira/browse/MYFACES-1807?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12567158#action_12567158

Autres conseils

L’attribut forceId des composants tomahawk devrait résoudre ce problème.

quelque chose comme:

&lt;t:outputText id="xyz" forceId="true" value="#{mybean.stuff}"/&gt;

Dans la première vue de la page, appuyez sur le bouton "CRÉER UN TICKET". bouton avec aucun des inputTexts et aucun fichier téléchargé, les balises de message fonctionnent-elles pour les inputTexts? (ie. required = true) Je suis juste curieux de savoir si les messages pour les inputTexts fonctionnent mais le message pour le inputFileUpload ne l'est pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top