tapestryメモ


Tapestryメモ

サブミットボタンの位置より下の入力値がサーバに届かない?

 [__________][検索] だとよいっぽいのだが、
 [検索][__________] だと入力値がサーバに届かない

Tapestry内部の評価の順番が、HTMLで上のものから順番で始まるらしく、

,両豺隋TextをVisitに格納 -> 検索処理 となるが、

△両豺隋検索処理 -> TextをVisitに格納 となるっぽい。

回避方法はよくわからん。

ERROR 'Template for component...の回避

ERROR 'Template for component Login does not reference embedded component: XXXX' BaseComponentTemplateLoader.java
   XXXXという定義が *.page で定義されているが、*.html で使われていない時に発生。

.pageからXXXXを消せばOK。

文字列を表示する際に\nを改行に変えたい

InsertText? を使用する

<span jwcid="@InsertText" value="ognl:message" mode="ognl:@org.apache.tapestry.html.InsertTextMode@BREAK"/>

initiallize で Visit を呼ぶ?

一番最初にinitialize()が呼ばれるときgetVisit()がExceptionになるため、 これを防がなくてはならない。 で、一応できたがこれでよいのか?

 /**
  * 初期化処理
  */
 protected void initialize() {
   if (getEngine() != null) {
     MokeVisit visit = (MokeVisit) getVisit();
     visit.setUser("");
   }
 }

getEngine()を呼んでnullチェックをしていいのか非常に疑わしい。 また、initialize()は画面表示前のほか、別画面へ遷移する場合にも呼ばれる。 注意したい。


認証チェック

認証したい画面のAbstractPage?#validate()をオーバーライドするとうまくいった。

 /**
  * 正当性チェック
  * 認証を行い、権限がない場合はエラー画面へ遷移する
  */
 public void validate(IRequestCycle cycle) {
   if (.....)
     throw new PageRedirectException("Error");
   super.validate(cycle);
 }

Exception画面を差し替えたい

  • アプリケーションスペックXML(.applicationファイル)に、name属性が"Exception"であるpageエレメントにより、"Exception"という名前でページを登録する。
  • Exception.htmlとException.pageと、ページクラスを作るなどして、独自例外ページを用意する。(Exceptionという名前でページを作れば.applicationに必要なし?)
  • ページクラスに、setException(Throwable t)を実装するなどして、exceptionプロパティを作る。TapestryはこのプロパティのSetterがあるものとして、例外オブジェクトをセットしにきます。

xxx.application

 <page name="Exception" specification-path="Exception.page" />

ExceptionPage?.java

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tapestry.IBinding;
import org.apache.tapestry.html.BasePage;

/**
 * オリジナルExceptionページ
 */
public class ExceptionPage extends BasePage {
  Log log = LogFactory.getLog(ExceptionPage.class); 

  private IBinding exceptionBinding;
  private Throwable exception;

  public Throwable getException() {
    return exception;
  }

  public void setException(Throwable exception) {
    log.error("例外発生:", exception);
    this.exception = exception;
  }

  public IBinding getExceptionBinding() {
    return exceptionBinding;
  }

  public void setExceptionBinding(IBinding exceptionBinding) {
    this.exceptionBinding = exceptionBinding;
  }

}

他にも、StaleLink?(Backボタン例外用)、StaleSession?(セッション切れ例外用)という特別なページがある

Menu

Linux

サーバ構築

Windows

Java

Program

 

最新の20件

2008-04-02 2008-03-11 2008-01-28 2008-01-21 2007-11-27 2007-09-19 2007-06-07 2007-04-11 2007-04-06 2007-03-22 2006-12-20 2006-12-05 2006-12-04 2006-10-27 2006-09-22 2006-07-03 2006-05-16