◆ Seasar




画像などのリソース

画像、css、jsファイルなどは全て
webapp下に配置する。
index.jspから下のフォルダに行けば、
../が必要。

画面を追加したら、サーバを再起動しないと表示されない


結合する為には。


TblUser.java (entity)

String id;
String name;
String placeId;

// 追加
@ManyToOne
@JoinColumn(name="PLACE_ID", referencedColumnName="ID")
MasterPlace masterPlace;
MasterPlaceクラスに位置情報一覧が入ってて、
TblUserクラスのplaceIdと紐づいてる感じです。
TblUserクラスにはユーザー情報が入ってて、
ユーザー一覧がDBに保存してある感じです。
ユーザー情報(多)に対して、ひとつずつの位置情報が紐づいているので
@ManyToOneを指定します。

Serviceクラスでjoinする時は、
ここ↑の変数名を渡します。
TblUserService.java (Dao)
List<TblUser> findAll() {
    return jdbcManager
           .from(TblUser.class)
           .innerJoin("masterPlace")     // ←TblUserクラス内の変数名
           .getResultList();
}

${f:url('')}タグって必要?

Seasarのパスはどのフォルダから参照されているかによって
変わります。
例えば、
project/images/logo.gif
という画像を表示したいとします。
project/index.jspから/images/logo.gifというパスで
表示するとすれば難なく表示できるでしょう。
しかし、project/contents/index.jspから参照するとなるとどうでしょう。
/images/logo.gifというパスを指定すると、
project/contents/images/logo.gif
を参照して、表示できません。
やむを得ず、../images/logo.gifと指定しますが、
エラー画面であるproject/error.jspから遷移してきた場合など、
ページのパスがproject直下にある場合があります。
同じパスで指定できないじゃん!どうすんのさ!
そんな時に活躍するのが${f:url('')}タグです。
project/contents/index.jsp内で${f:url('/images/logo.gif')}と
指定すれば違う階層の画面から遷移した場合でも
画像がちゃんと表示されます。

「ソースを表示」で表示されたページのHTMLを見てみると、
project/images/logo.gifに書き換えられています。
どうやら/で始まるパスの場合プロジェクト直下に指定し直してくれるらしいです。
さすが、Seasarです。

ただし、このタグを<html:image>タグのpageのパラメータなどに使ってしまうと、
おかしなことになるようです。
"project/images/logo.gif"を参照しようとしてエラーになります。
strutsのタグでもパスを書き換えてくれるんでしょうか。

プロパティファイルで改行するには

プロパティファイルに説明文のような長文を入れたい場合は、
バックスラッシュで改行できるらしい

form.actionをjavascriptで書き換えて送信すると、ブラウザで戻った時に送信した値が消える(Chromeのみ)


Seasar限定で発生するバグらしい。
ブラウザの戻るボタンを押した時に
actionの値を直接書き換えていると、
URLが変わらないらしい。
ChromeはURLを見て、画面再読み込みをしているらしく、
URLが想定してたのと違うので、
戻るという動作ではなく、別画面として
読み込みし直してしまうらしい。

prev.jsp → Action method1() → next.jsp

class HogeAction{
    @Execute(validator = false)
    public String method1() {...
    @Execute(validator = false)
    public String method2() {...
という感じだとすると、
prev.jspのformのactionには初めにmethod2が指定されていて
form[0].action = "method1"としてsubmitするとする。

そうすると、next.jspから戻る時に
actionに割り当てられてるmethod1だと思ってるけど、
実際に戻るアドレスはmethod2だから
違うので再読み込みが走る。

|