Die <t:Nachricht> nicht ordnungsgemäß angezeigt, wenn die Verwendung von <t:inputFileUpload> in <t:PanelTabbedPane>

In einer JSP-Seite habe ich eine <h:form enctype="multipart/form-data"> mit einigen Elementen: <t:inputText>, <t:inputDate> usw. Auch ich habe einige <t:message for="someElement"> Und ich wollte ermöglichen, dass der Benutzer das hochladen mehrerer Dateien (nacheinander) in die form (mit <t:inputFileUpload> ) An dieser Stelle mein code funktioniert einwandfrei.


Der Kopfschmerz kommt, wenn ich versuche, um die form im inneren eine <t:panelTabbedPane serverSideTabSwitch="false"> (und damit natürlich auch, in einem <t:panelTab> )

Kopierte ich die Struktur gezeigt, in der source-code für TabbedPane Beispiel aus Tomahawk s Beispiele, indem die <f:subview> tag und setzen die panelTab-tag in eine neue jsp-Seite (mit der <jsp:include page="somePage.jsp"> - Richtlinie)

Zunächst an alle, die <t:inputFileUpload> fehlschlägt, laden Sie die Datei an den zugewiesenen Wert in der Managed Bean UploadedFile Attribut #{myBean.upFile}

Dann, googeln nach einem Anhaltspunkt, wusste ich, dass <t:panelTabbedPane> erzeugt ein Formular namens "autoform", so war ich immer verschachtelte Formen. Ok, ich fest, dass die Schaffung der <h:form> aus der <t:panelTabbedPane> und eureka! Datei-Eingabe funktionierte wieder! (die autoform nicht erzeugen)

Aber, oh Wunder! oh schrecklich Murphy Gesetz! Alle meine <h:message> zu Versagen beginnt. Die Eclipse-Konsole Ausgabe zeigen mir, dass alle <t:message> suchen nonexistents Elemente-ID 's (die haben Ihre ID' s in Teil entspricht, die Sie suchen, aber am Ende die ID ' s Ihre Namen ändern)

Zu diesem Zeitpunkt, habe ich eine <t:mesagges> tag (beachten Sie das "s" am Ende) zeigen mir alle Fehler bei der Validierung auf einmal am Anfang der Platte, und es funktioniert gut. So, Validierung Fehler vorhanden ist, und zeigen Sie richtig an den Anfang der Platte.

Alle Validierungsfehler erzeugt in dieser Seite sind die JSF-eingebaute Validierung von Nachrichten. Die backing bean in diesem moment keine Prüfer definiert.

¿Wie kann ich die <t:message for="xyz"> richtig funktioniert?


Ich bin mit Tomahawk-1.1.6 mit myFaces-impl-1.2.3 in einer eclipse-Ganymede-Projekt mit dem Geronimo Application Server (Geronimo gibt mir die myFaces jar-Implementierung, während ich die tomahawk-jar in das WEB-INF/lib-Ordner der Anwendung)


"GELÖST": Dieses problem ist ein Problem berichtet, myFaces forum.

Dank Kyle Renfro für die schnell Antwort und Informationen. (Guter job, Kyle!)
Das Problem sehen


BEARBEITEN 1

1.- Dank Kyle Renfro für seine baldige Antwort. Die forceID-Attribut im input-element funktioniert nicht beim ersten mal, aber tun einige sehr knifflige tweaks konnte ich die <t:message for="xyz"> - tags arbeiten.

Was ich Tat, war:

1. Mein tag <inputText id="name" forceId="true" required="true"> Die <t:message> funktioniert nicht.

2. Dann, nachdem man die Fehlermeldungen von eclipse-Konsole, umbenannt habe ich meine "id" - Attribut: "< " inputText id="namej_id_1" forceId="true" required="true">

3. Dann die <t:message> gearbeitet!! aber nach dem drücken der Schaltfläche "Submit" des Formulars das zweite mal. ¡Zum zweiten mal! (Ich vermute, dass etwas Los ist in der JSF-lifecycle)

4. Dies bedeutet, dass der Benutzer die Taste 2 mal den submit-button, um die Fehlermeldungen auf der Seite.

5. Und mit dem "j_id_1" Satz am Ende der IDs ist sehr seltsam.


EDIT 2

Ok, hier kommt der code, hoffe, dass es nicht nervig sein.

1.- mainPage.jsp (hier ist die <t:panelTabbedPane> und <f:subview> tags)

<%@ 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 (hier ist die <t:panelTab> tag)

<%@ 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

Reaktion auf Kyle Renfro follow-up:

Kyle sagt:

"Auf den ersten Blick von der Seite, wenn Sie drücken Sie die "CREATE TICKET" - button, mit dem nichts in jedem der inputTexts und keine Dateien hochgeladen, tun die Nachricht tags funktionieren des inputTexts? (dh. required = true), ich bin nur neugierig, ob die Nachrichten für die inputTexts arbeiten, aber die Nachricht für die inputFileUpload nicht."

Hier ist das Verhalten gefunden:

1.- Es gibt keine Validierungsfehler angezeigt (die Meldung-tags funktionieren nicht) Selbst wenn ich versuche zu testen, nur eine Validierung Fehlermeldung (zum Beispiel die Prüfung der Meldung für die erste Eingabe-text) keiner von Ihnen zeigt.

2.- Die eclipse-Konsole zeigt mir diese Fehlermeldungen:

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.  

Hier ist, wenn ich sah die "j_id_1" Wort auf die generierte IDs, zum Beispiel, für die 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

Und betrachten die resultierende HTML-Seite generiert, sah ich, dass die IDs, Namen sind wie diese (ohne Verwendung von "ForceId" atribute):

<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">  

InformationsquelleAutor | 

Schreibe einen Kommentar