dateTimePickerのtype="time"時テキストボックス表示

んー。これも悩み続けているけど、いい手が思い浮かばない。
datetimepickerはtype="date"だとサーバーからの戻りをdisplayFormatで指定したフォーマットで正常に
表示できるけど、type="time"だと思ったように動かない。。
#諸事情によりStruts2.0系で試してます




上のコードでtimeプロパティの値を表示してほしいんですどねー。
中のソースをおっかけていくと、文字列としてクライアント側のdojoに渡しているのはRFC3339規定フォーマットの日付文字列みたいですね。
サーバーサイドからdisplayFormatで指定した文字列値を返しているわけではなく、そっからdojoの中でゴチャゴチャやってそう。。
そこまで追う気にはなれないなー。


代替案としては、以下のようなコードで値を設定はできますが…。
前に試したJavaScript-onLoad時の指定方式です。

■クライアントサイド(JSP)
<script language="javascript">
this.onload = function () {
// timeStrは「HH:mm」形式にフォーマット済みの文字列
dojo.widget.byId("picker").inputNode.value = "";
}
</script>

■サーバーサイド(TestDtoクラス - testDtoオブジェクトのクラス)
… クラス定義省略
private Date time = new Date(System.currentTimeMillis());
private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");

public String getTimeStr() {
return TIME_FORMAT.format(time);
}
… その他省略

ID指定しないと、inputオブジェクトにうまくアクセスする方法がないのが辛いか…
ん〜、ダメダメだけど今回はこれで我慢するかなー。




■追記
上のやり方で動いたように思えていたけど・・・
次にリクエスト投げる時に、無理矢理設定した値が送信されていない。。。
よく調べてみると、inputNodeだけでなくvalueNode(こいつはinputタグのhidden)にRFC3339規定の形式で値を設定する必要があるみたい。
inputNode側はあくまで「見た目の処理」にしか使ってないんですね。フェイントだわ。
そこで、DTOに以下のgetterを追加

private static final SimpleDateFormat TIME_VALUE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
public String getTimeValueStr() {
return TIME_VALUE_FORMAT.format(time);
}
javascript側にも以下を追加

dojo.widget.byId("picker").valueNode.value = "";
すると、想定通りに動作しました。。
なんかヤバそうな気もするけどとりあえずはOKかな。