Tatsuya Blog
msgbartop
ニートになりたいプログラマ
msgbarbottom

2009-07-30 01:10 [JC]改行コードをbrタグに置換するタグライブラリを作成しました

  • Share

はい。タイトル通りのタグライブラリを作成してみました。当初普通のJSPのタグライブラリを作成したのですが、下記のように値を渡す予定だったのですが、これじゃ渡せないじゃんということに作成し終わった後に気づいて作成しなおしました。というか、デバッグの始まりでしたw

<jc :txt2br value="%{messageDto.body}"/>

今回作成したのは下記の4点です。

  • Text2BrTag.java:タグライブラリクラス
  • Text2Br.java:タグライブラリコンポーネント
  • HtmlUtils.java:HTML出力用ユーティリティ
  • jcommunity.tld:カスタムタグ定義ファイル

また今回も醜いかとは思いますが、何かの役に立てばと思い、ソースを貼り付けておきます。

(more…)

Tags: , ,

2009-07-25 09:32 [JC]Struts2での例外処理について

  • Share

ExceptionSequenceActionなどでExceptionが発生した際に、自動的にエラーページに遷移できるようにしておくと余計なエラー処理を内部で各必要がなくなるので便利かと思い作成しました。

今回の要件として、上記に加え、エラーの内容をメッセージコードで管理しているのでそれを利用し、さらに意図しないエラーの場合はデフォルトのメッセージコードを割り当てるというものです。

作成したのは、「com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor」を継承した自作例外インターセプタークラスだけです。実際、処理もほとんど変わっていません。

いつもの用に作成したソースは、下記に掲載しているので良ければ見てください。

作成したクラス以外の注意点として、インターセプタースタックにデフォルトの「defaultStack」を利用している場合、exceptionという通常の例外処理用インターセプターが存在するため、それを除外する必要があります。定義済みのスタックから除外する方法が見つからなかったので、defaultStackからexceptionを除いてstruts.xmlにて再定義しています。

(more…)

Tags: ,

2009-07-20 20:58 [Struts2]validateエラー時のchainについて

  • Share

ValidationErorrSequence現在、アプリを作成していて、入力画面→入力エラー→入力画面みたいな遷移で、入力画面には、サイドバーなどに共通項目があるんですが、画像のように、「ArticleCreateAction」で共通項目について取得したいと思ってるんですが、validateメソッドでのエラー時にはどうもchainはされるんですが、executeメソッドは実行されないようです。

今は仕方ないので、「ArticleCreateWithValidationAction」のvalidateメソッド内で共通項目についても取得しているんですよね。。。何かうまい方法はないんでしょうかね。

まぁ、今作っているアプリは確認画面を作成するのに手間がかかるので、javascriptでの確認ウィンドウを出すだけにしているんですけど、実際の業務で作成することになるアプリでは確認画面をどうしても作成することになるからその辺のtipsも集めたいんですけどね。

あと、あれだなぁ、validateについてもxmlで行うか、Action内のvalidateメソッドで行うかも統一した方がいいんだろうなと思う。簡単なvalidateだけならxmlの方が簡単なんですけど、DBが絡んでくるとどうしてもvalidateメソッドで実装した方が簡単に思える。もしかするとカスタムValidate XMLを作成すれば同じように比較的簡単に記述出来るのかもしれないですけど。この辺ももう少し調べたい。

Tags:

2009-07-07 05:43 [JC]Struts2でjsp内でsessionの値の取得について

  • Share

セッションにキー「user」としてUserクラスのインスタンスを格納して、jsp内で、Userクラスのnameフィールドを表示したい。というようなシナリオがあるとします。今回はそのようなシナリオでやっていこうと思います。

■User.java

1
2
3
4
5
6
7
8
9
10
11
public class User {
	private String name;
 
	public String getName(){
		return this.name;
	}
 
	public String setName(String name){
		return this.name = name;
	}
}

■Hoge.jsp

1
Hello <s :property value="#session.user.name"/>

簡単に書きましたが、以下のフォーマットでアクセスできるようです。

<s :property value="#session.[キー名].[フィールド名]"/>

ちなみに、Mapなんかでも同じようにアクセスできるので、試してみて下さい。

Tags: , , ,