JSP ページで、いくつかの要素を含む を作成しました<h:form enctype="multipart/form-data">
: 、<t:inputText>
など<t:inputDate>
。.<t:message for="someElement">
<t:inputFileUpload>
フォームを a の中に入れようとすると<t:panelTabbedPane serverSideTabSwitch="false">
(もちろん、 a の中に入れようとすると<t:panelTab>
) 頭痛の種になります。
タグを使用して新しい jsp ページ内に panelTab タグを配置することにより (ディレクティブを使用して) 、 Tomahawk の例から TabbedPane の例のソース コードに示されている構造をコピーしました。<f:subview>
<jsp:include page="somePage.jsp">
まず<t:inputFileUpload>
、Managed Bean UploadedFile 属性で割り当てられた値でファイルをロードできません。#{myBean.upFile}
次に、手がかりをグーグル<t:panelTabbedPane>
で検索すると、「オートフォーム」と呼ばれるフォームが生成されることがわかったので、ネストされたフォームを取得していました。<h:form>
わかりました、私はアウトとエウレカの作成を修正しました<t:panelTabbedPane>
! ファイル入力が再び機能しました!(オートフォームは生成されません)
でも、びっくり!ひどいマーフィーの法則!私のすべて<h:message>
が失敗し始めます。Eclipseコンソールの出力は、すべて<t:message>
が存在しない要素IDを探していることを示しています(IDの一部は探しているものと同じですが、IDの最後で名前が変更されます)
この時点で<t:mesagges>
、パネルの先頭にすべての検証エラーを一度に表示するタグ (末尾の「s」に注意してください) を配置すると、正常に動作します。そのため、検証エラーが存在し、パネルの最初に正しく表示されます。
このページで生成されるすべての検証エラー メッセージは、JSF 組み込みの検証メッセージです。この時点で、バッキング Bean にはバリデーターが定義されていません。
¿私はどのように<t:message for="xyz">
適切に動作させることができますか?
アプリケーション サーバーとして Geronimo を使用する Eclipse Ganymede プロジェクトで、Tomahawk-1.1.6 と myFaces-impl-1.2.3 を使用しています (Geronimo は myFaces jar 実装を提供し、tomahawk jar を Web-INF/lib フォルダーに配置します)応用)
「解決済み」: この問題は、myFaces フォーラムに報告された問題です。
すぐに応答と情報を提供してくれた Kyle Renfro に感謝します。(よくやったカイル!) 問題を見る
編集1
1.- すぐに返信してくれた Kyle Renfro に感謝します。入力要素内で使用される forceID 属性は、最初は機能しませんが、いくつかの非常にトリッキーな調整を行うことで、<t:message for="xyz">
タグを機能させることができました。
私がしたことは次のとおり
です。 1.タグを付けてもうまくいきません。
2. 次に、Eclipse コンソールでエラー メッセージを確認した後、「id」属性の名前を次のように変更しました。 <inputText id=" namej_id_1 "
forceId ="true" required="true"> しかし、フォームの「送信」ボタンを2回押した後。2回目!(JSF ライフサイクルで何かが起こっていると思われます)
4. これは、ユーザーが送信ボタンを 2 回押して、ページにエラー メッセージを表示する必要があることを意味します。
5. ID の末尾に「j_id_1」という語句を使用するのは非常に奇妙です。 <inputText id="name" forceId="true" required="true">
<t:message>
<t:message>
編集2
わかりました、ここにコードがあります。迷惑にならないように願っています。
1.- mainPage.jsp (ここに<t:panelTabbedPane>
and<f:subview>
タグがあります)
<%@ 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 (<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>
編集3
カイル・レンフロのフォローアップへの返答:
カイル 言います:
「ページの最初のビューで、inputTexts に何も入力せず、ファイルをアップロードせずに [チケットを作成] ボタンを押した場合、メッセージ タグは inputTexts に対して機能しますか? (つまり、required = true)」 inputTexts のメッセージは機能しているが、inputFileUpload のメッセージは機能していないかどうかに興味があります。」
1.-
検証エラー メッセージがまったく表示されない (メッセージ タグが機能しない) 検証エラー メッセージを 1 つだけテストしようとしても (たとえば、最初の入力テキストのメッセージをテストする) ) どれも表示されません。
2.- Eclipse コンソールに次の内部エラーが表示されます。
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.
"j_id_1"
たとえば、ID「ticket_id」の場合、生成されたIDで単語 を見たときは次のとおりです。
j_id_jsp_1383779881_1:subview_tab_detail:j_id_jsp_1716158401_0j_id_1:j_id_jsp_1716158401_5j_id_1
そして、生成された HTML 生成ページを表示すると、ID 名が次のようになっていることがわかりました ("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">