@InvalidateSession

s2struts(1.3.0-RC5)で開発中ですが、
自前インターセプター内である条件の際に
HttpSession#invalidate()を呼び出してExceptionをスローしていたのですが、
セッション内にs2strutsフレームワークで使用している情報があるらしく(s2strutsContext)、
スローしたExceptionが無視されてしまいます。

そこで、InvalidateSessionInterceptorを使用してセッションクリアを行おうと
自前インターセプター内のメソッドに@InvalidateSessionを付加したものの、
セッションがクリアされない・・_| ̄|○・・

・・原因はpublicメソッドでないのが原因でした。
@InvalidateSessionを設定するメソッドはprivateでもprotectedでもダメなんですね・・。
会社の人も同じ所でハマってました(・∀・)

以上

Kumu.Ajax.renderについて

[Seasar-user:12520] Re: [teeda ajax] Kumu.Ajax.render についてより
デフォルトはinnerHTMLにのみセットされるので
実際には開発者各自でカスタマイズしなければならない・・。
具体的な方法としてはKumu.Ajax._setJSONDataをオーバーライドする。

[ajax.js(現状)]

 _setJSONData : function(node, data){
  if(node.style.display == 'none'){
   node.style.display = '';
  }
  node.innerHTML = data;
 }

[オーバーライド]

 Kumu.Ajax._setJSONData  = function(node, data){
  if(node.style.display == 'none'){
   node.style.display = '';
  }
  var tag = node.tagName.toLowerCase();
  if(tag == 'input'){
   node.value = data;
  }else{
   node.innerHTML = data;
  }
 }

これでinputタグの値もレンダリングされるようになったけど、
こんなつくりでいいのかな〜(不安)・・。

以上

foreach内のcondition内のdoメソッドの呼び出し

1.0.12-rc1で対応されたのは確認したものの、
納品前でバージョンを上げる訳にはいかないので、
[Seasar-user:11043] [Teeda] 1.0.12-SNAPSHOT ForEach内のCondition内のdoメソッドが実行できないのスレッドを参考に回避策を記述します。

[hoge.html]

 (foreach内)

 <!--  Conditionを用いた場合
    <div id="isEven">
     <input type="button" id="doEven" value="even"/>
    </div>
    <div id="isOdd">
     <input type="button" id="doOdd" value="odd"/>
    </div>
 -->

 <!-- 回避策 -->
 <input type="button" id="doEven" value="even" style="dummy" />
 <input type="button" id="doOdd" value="odd" style="dummy" />


[HogePage.java]

 (略)

 public String getDoEvenStyle() {
  if(isOdd()){
	return "display:none;";
  }
  return null;
 }

 public String getDoOddStyle() {
  if(isEven()){
   return "display:none;";
  }
  return null;
 }

以上

DyanmicValidation

DyanmicValidationとはフィールドにかけるValidatorを動的に変更機能で
使用方法は以下の通り。

[hoge.html]

<input type="text" id="hoge"/><br/>
<input type="text" id="moge"/>

[HogePage.java]

@Required // ←動的なValidatorが定義されている場合無視される
private String hoge;
private String moge;
//JSFの暗黙オブジェクトのリクエストパラメータ
private Map param;

public Validator getHogeValidator(){
 ValidatorChain chain = new ValidatorChain();
 String paramMoge = (String)this.getParam().get("fugaForm:moge");
 // mogeが入力されていたら
 if(paramMoge != null){
  chain.add(new TRequiredValidator());
 }
 return chain;
}

※動的バリデーションが動作しているタイミングではPageクラスに値がセットされていないため、
 必要な場合はリクエストパラメータから値を直接取得する必要がある。

以上

続spanタグを出力しない

以前、spanタグを出力しない方法(2007-10-26 - (TДT)のテンパリ日記)を書いたが、conditionでは併用することができない。
ただ、今後修正されるらしい・・(=_=)
([TEEDA-409] condition で te:omittag を使えるようにしました. - The Seasar Foundation Issues (Deprecated))

以上

エラー時に入力項目の背景色を変更する

以下の様にCSSの定義箇所に、『.onTeedaError』を追加する。

.onTeedaError {background-color: #FF9999; }

エラーメッセージのスタイルは各自でスタイルを定義する。

<span id="allMessages" class="error"/>

以上

奇数行と偶数行で色を変える

DynamicPropertyを使って属性を変更する。
方法は以下の通り。

[hoge.html]

<tr class="" id="designRow">

のタグの上で右クリックし、[Dolteng]-[Add Dyanamic Property]を選択する。
するとPageクラスにgetDesignRowClass()メソッドが生成するので、
そこに奇数・偶数行ごとにスタイルを変更するようなロジックを入れる。

[HogePage.java]

public int mogeIndex;
public MogeDto mogeItems;

public String getDesignRowClass() {
 if(mogeIndex % 2 == 0){
  return "clr_01";
 }else{
  return "clr_02";
 }
}

以上