Frage

In einer JSP-Seite, habe ich einen <h:form enctype="multipart/form-data"> mit einigen Elementen: <t:inputText>, <t:inputDate>, etc. Auch, fügte ich einig <t:message for="someElement"> Und ich wollte dem Benutzer lädt mehrere Dateien (einen nach dem anderen) in der Form (mit <t:inputFileUpload> ermöglichen ) An dieser Stelle mein Code funktioniert gut.


Der Kopfschmerz kommt, wenn ich versuche, das Formular in einem <t:panelTabbedPane serverSideTabSwitch="false"> zu setzen (und damit natürlich in einem <t:panelTab>)

ich die Struktur kopiert für TabbedPane Beispiel im Quelltext angezeigt von Tomahawk der Beispiele , durch den <f:subview> Tag und setzen den panelTab-Tag in einer neuen jsp Seite (mit <jsp:include page="somePage.jsp"> Richtlinie)

mit

Zuerst überhaupt, schlägt die <t:inputFileUpload> die Datei auf dem Wert in der Managed Bean UploadedFile Attribute #{myBean.upFile} zugewiesen laden

Dann nach einem Hinweis googeln, ich wusste, dass <t:panelTabbedPane> eine Form „Autoform“ genannt erzeugt, so dass ich verschachtelte Formen bekommen. Ok, ich festgelegt, dass die <h:form> aus den <t:panelTabbedPane> und EUREKA zu schaffen! Datei-Eingabe funktioniert wieder! (Die Autoform nicht erzeugt)

Aber, oh Überraschung! oh schrecklich Murphy Gesetz! Alle meine <h:message> beginnt zu versagen. Der Ausgang des Eclipse-Konsole mir zeigen, dass alle <t:message> suchen nonexistents Elemente IDs (die ihre IDs teil haben gleich zu die sie suchen, aber am Ende der ihren Namen der ID ändern)

An diesem Punkt habe ich einen <t:mesagges> Tag (man beachte die „s“ am Ende), mich zu zeigen alle Validierungsfehler auf einmal zu Beginn des Panels, und es funktioniert gut. Also, Validierungsfehler vorhanden ist, und sie zeigen, richtig am Anfang des Gremiums.

Alle Validierung Fehlermeldungen auf dieser Seite erzeugt werden, die JSF integrierten Validierungsmeldungen. Die Backing Bean in diesem Moment hat keine Validatoren 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 einem Eclipse-Ganymede Projekt mit Geronimo als Application Server (Geronimo gibt mir die MyFaces jar Implementierung, während ich das Kriegsbeil Glas im WEB-INF setzen / Ordner lib Anwendung)


"gelöst": Dieses Problem ist ein Problem auf MyFaces Foren berichtet

.

Dank Kyle Renfro für die bald Antwort und Informationen. (Good Job Kyle!)
3. Dann arbeitete die <t:message> !! aber nach der Schaltfläche „Senden“ des Formulars zum zweiten Mal drücken. Das zweite Mal! (Ich vermute, dass etwas an dem JSF-Lebenszyklus los ist)
4. Dies bedeutet, dass der Benutzer 2 mal auf der Seite den Submit-Button drücken, um die Fehlermeldungen zu erhalten.
5. Und am Ende der IDs der „j_id_1“ Wortphrase ist sehr seltsam.


EDIT 2

Ok, hier kommt der Code, hoffen, dass es nicht lästig 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 der <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

Auf Antwort auf Kyle Renfro Follow-up:

  

Kyle sagt:

     
    

"Beim ersten Blick auf die Seite, wenn Sie die Taste‚CREATE TICKET‘Taste mit nichts in einem der inputTexts und keine Dateien hochgeladen, führen Sie die Nachricht Tags für die inputTexts arbeiten? (Dh. Required = true) I ist nur gespannt, ob die Nachrichten für die inputTexts arbeiten, aber die Botschaft für die inputFileUpload ist es nicht.“

  

Hier ist das Verhalten gefunden:
1.- Es gibt keine Validierung Fehlermeldungen an alle gezeigt Selbst (die Nachricht Tags funktionieren nicht), wenn ich versuche nur eine Validierungsfehlermeldung zu testen (zum Beispiel die Prüfung der Meldung zum ersten Eingabetext) keiner von ihnen zeigt sich .
2.- Die Eclipse-Konsole zeigt mir diese internen Fehler:

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 das "j_id_1" Wort an dem generierten IDs sah 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 die resultierende HTML-generierte Seite sehen, sah ich, dass die IDs Namen wie diese sind (whitout mit "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">  

Andere Tipps

Die forceId Attribut der Tomahawk-Komponenten soll dieses Problem lösen.

so etwas wie:

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

Beim ersten Blick auf die Seite, wenn Sie die „CREATE TICKET“ Knopf mit nichts in einem der inputTexts und keine Dateien hochgeladen drücken, haben die Nachricht Tags für die inputTexts arbeiten? (Dh. Required = true) Ich bin nur gespannt, ob die Nachrichten für die inputTexts arbeiten, aber die Botschaft für die inputFileUpload nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top