[[FAQ]]

*Teeda [#q6e5781b]

#contents

**インクルードしたhtmlで前ページからのプロパティを参照したい [#n61605b9]

- A: http://ml.seasar.org/archives/seasar-user/2007-June/010238.html

**Tomcat起動時にParserConfigurationExceptionが発生する [#z2ade9df]

Tomcat起動時に次のようなエラーが発生する場合、

> org.seasar.framework.exception.ParserConfigurationRuntimeException: [ESSR0053]パーサの設定に問題があります。理由はjavax.xml.parsers.ParserConfigurationException: Feature 'http://apache.org/xml/features/xinclude' is not recognized.

$TOMCAT/common/endorsedにある、xercesImpl.jarとxml-apis.jarを削除してください。
(Tomcat 5.5.20で確認)


**TeedaExtensionでFormにInputTextが一つしかないとsubmit時にname属性が飛ばない。 [#m1fce656]

以下のように、formに1つのInputTextしか無い場合に、inputTextにfocusして

Enterキーを押すとname属性がわたらず、doXxxが呼ばれない。

この現象はIEの場合のみ発生する。

 <form id="form">
 <span>hogehoge</span>
 <input type="text" id="arg1" title="INPUT1" />
 <input type="submit" value="calculate" id="doCalculate"/>
 </form>


これを解消するには、
 <input type="text" style="display: none"/>
をひとつ追加する


**TeedaをWAS6.1で動かす [#c3390567]


TeedaをWAS6.1で動かすには、
-WEB-INF/libにServletのjarが含まれていたら消去してWARにする.
-WASの設定で、WARのクラスローダーに「最初にアプリケーションクラスローダーをロードしたクラス」を選択する

**動的にHTMLタグの属性を設定を行うには [#o0388425]
DynamicPropertyを使用してください。

http://teeda.seasar.org/ja/extension_features.html#dynamicproperty


**TeedaのPageClass からコンポーネントをスコープに置くには [Seasar-user:5581] [#ad708177]
service,dtoなどの適当なパッケージにコンポーネントを作り、
 @Component(instance=InstanceType.SESSION)
 public class ...
のようにインスタンス属性を指定してください。

**個別の例外に応じてエラーページを設定する [#p89be55a]
teedaErrorPage.diconに個別の例外に応じてエラーページの設定を記述します。
 <component class="org.seasar.teeda.extension.util.TeedaExtensionErrorPageManagerImpl">
 <!--ここから追加-->
    <initMethod name="addErrorPage">
        <arg>@org.seasar.framework.exception.SRuntimeException@class</arg>
        <arg>"/view/error/custom.html"</arg>
    </initMethod>
 <!--ここまで-->
    <initMethod name="addErrorPage">
        <arg>@java.lang.Throwable@class</arg>
        <arg>"/view/error/error.html"</arg>
    </initMethod>
 </component>

この場合、個別の例外の設定のほうが上にくるようにしてください。
**NullLabelの「選択してください」という文面を変更するには [#m9ca05ec]

propertiesで切り替えることが出来ます。

まずpropertiesファイルを作成して、faces-config.xmlに定義します。
(名前は一般的には、appMessages.propertiesがよく使われます)
このあたりはteeda-html-exampleを参考にしてください。

そこに、
org.seasar.teeda.extension.component.TSelect.NULL_LABEL
というキーで値を設定すればこのNULLラベルが使用されます。

**Pageクラスでrequest/response/session/context/FacesContextを使用するには [#xfc0eff8]
pageクラスに、以下のプロパティを用意してください。
|クラス|プロパティ名|
|HttpServeltRequest|-|
|HttpServeltResponse|-|
|HttpSession|-|
|ServletContext|-|
|FacesContext|facesContext|
**Pageクラスから直接エラーメッセージを設定する [#q79cd033]
javax.faces.internal.FacesMessageUtilを使用して、
 FacesMessageUtil.addErrorMessage("E0000002");
のようにしてください。

メッセージは、 WEB-INF/faces-config.xmlで指定したプロパティファイルに記述します。

**実体参照を表示するには [#m215ddb5]
例えばノーブレークスペース(non-breaking space, NBSP)を表示したい場合、テンプレートHTML上では次のように記述します。

-Teeda 1.0.12以降で[[CLASSIC>http://teeda.seasar.org/ja/extension_customize.html#parse-xhtml]]以外の場合はそのまま記述します
 &nbsp;
-Teeda 1.0.11 以前またはTeeda 1.0.12以降で[[CLASSIC>http://teeda.seasar.org/ja/extension_customize.html#parse-xhtml]]の場合は一段階エスケープします
 &amp;&nbsp;
-outputTextでノーブレークスペースを表示する場合は、Pageクラスのプロパティに'\u00A0'を設定します。
 this.message = "\u00A0"

**conditionコンポーネントの<div>タグにDynamicPropertyを設定したい [#z6f06f15]
 <div id ="isNotCreate" style="〜">

なタグにDynamicPropertyを設定する場合、

 public String getIsNotCreateStyle() {
  //略
 }

となります。

**静的HTMLをTeedaの処理対象から外す [#h66c0434]
TeedaはHTMLファイルをXMLとして解析するので、静的なHTMLをそのまま出力する場合にXMLとしてwell-formedでないと例外になります。

静的なHTMLは拡張子を.htmにすれば、Teedaの処理対象ではなくなるのでひとまず出力することができます。

**LogicやHelperにFacesContextをDIしたい [#u29c5deb]
Teeda は FacesContext を外部コンテキストに設定するので、creator.dicon で、

 <component class="org.seasar.framework.container.creator.LogicCreator">
   <property name="externalBinding">true</property>
 </component>

とすれば Logic にも FacesContext が DI されるようになります。

Helperも同様です。

**バリデーションのエラーメッセージに id ではなく日本語を使うには? [#r01c25bf]

Label機能を使用して、idに対する日本語名称を設定します。

http://d.hatena.ne.jp/dewa/20070720#1184920170

**別サーバーのCGIを呼び出したい [#r2aaf4e6]

Pageクラスで普通にリダイレクトしてもらえれば
問題ありません.
FacesContextのresponseComplete()だけは呼び出してください.

下記のような感じです.


  public String doHoge() throws IOException {
    response.sendRedirect("http://www.yahoo.co.jp");
    response.sendRedirect("http://www.example.com/");
    facesContext.responseComplete();
    return null;
  }

**PageクラスでCSVダウンロードをさせたい [#u67e358f]

流れとしては以下のような手順になる
-ダウンロードするFileを生成
-ContentTypeやヘッダ情報の付加
-ServletOutputResponseStreamに書き出す
-FacesContext.responseComplete()を呼び出す

	public void doDownload() {
		final File file = downloadHelper.getFile("javaexpert-sample.csv");
		response.setContentType("application/octet-stream");
		response.setHeader("content-disposition", "attachment; filename=\""
				+ file.getName() + "\"");
		OutputStream os = null;
		try {
			os = response.getOutputStream();
			os.write(FileUtil.getBytes(file));
		} catch (IOException e) {
			throw new AppFacesException("E0000002");
		} finally {
			try {
				os.close();
			} catch (final IOException e) {
			}
		}
		this.facesContext.responseComplete();
	}

**ファイルアップロード [#iac58710]
1.0.13 からは Teeda の FileUpload コンポーネントを使うことができます.

http://teeda.seasar.org/ja/extension_features.html#fileupload

1.0.12 以前の場合は,TomahawkのFileUploadを使います。

http://d.hatena.ne.jp/shot6/20061122#1164175683

Teeda 1.0.8-RC1までは上記方法で動作するのを確認しています。

**Validationエラーのメッセージを変更する [#r5f769a3]

http://d.hatena.ne.jp/dewa/20070808#1186573480

**foreachの中身が表示されない [#r6c95bf4]
foreachを使う場合、DTOやMapで持っているIDと同じフィールドを、Pageの方にも持たせる必要があります。

**特定のPageにだけ(もしくは特定のPage以外のPageに)Interceptorをかけるには [#wc5e353d]
特定のPageだけなら、Pageクラスに
 @Aspect(インターセプタ名)
 public String doHoge() {
   ...
 }
のようにアノテーションを指定します。

**Pageにaspectが適用されない [#h4f2ce5c]
Seasar2のデフォルトでは、aspectはそのクラスのインターフェースで定義されているメソッドに適用されます。

TeedaのPageクラスはインターフェースを持ってないので、cunstomizer.diconでcustomizerの設定をするときに
 <property name="pointcut">"do.*, initialize, prerender"</property>
のようにポイントカットを指定する必要があります。

**ForEach内でチェックボックスを使用する [#td33d48d]

http://d.hatena.ne.jp/yone098/20070122/1169446352

をご参照ください。

**foreachでリストを展開したときに、一部のプロパティだけ表示されない [#i14a8060]
Pageがもっているプロパティの型とDto/Mapのプロパティの型が一致しているか確認してください。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS