カスタムコンバータと既存のコンバータ
DateTimeConverter.java import java.util.TimeZone; public class DateTimeConverter extends javax.faces.convert.DateTimeConverter { public static final String CONVERTER_ID =xxx.xxxx.xxxxx.DateTimeConverter.class.getName(); public DateTimeConverter() { setTimeZone(TimeZone.getDefault()); } }
こんなカスタムコンバータ作ってみました。
xxx.xxxx.xxxxxはパッケージ名。
で、faces-configにも
<h:outputText value="#{entry.time}" converter="getDefaultTime" />
こーするとキチンとタイムゾーンが修正されて出力されます。
がっ
<h:outputText value="#{entry.time}" converter="getDefaultTime" > <f:convertDateTime dateStyle="short" pattern="yyyy年MM月dd日" /> </h:outputText>
出力用パターンのため既存のコンバータと併用すると
GMTに戻ってやがるorz
そんなわけで毎回timeZone="Asia/Tokyo"を指定することに…。
faces-configの
最初はできそうな気がしたんだけどなあ。
研修覚え書き
先日のconverterDateTimeは…結局毎回timeZone="Asia/Tokyo"を指定する方向で実装。
これがまたナニでアレな仕様くさいので以下詳細。
converterDateTime
日付入力をStringで「7月27日」などと入力していて、表示の際は降順で持ってきてたわけですが
これだと同じ月なら「7月9日」が最上位にきてしまうとゆー…。
つことで日付はDate型にすることに。
そこで問題発生。
なぜか実際に入力してある日付と表示される日付にズレが生じる。
色々調べたところJSFの時間表示はGMT(グリニッジ標準時)がデフォらしい。
これを日本時間にするには
<h:outputText value="#{entryBean.entry.time}" > <f:convertDateTime dateStyle="short" timeZone="Asia/Tokyo" pattern="yyyy年MM月dd日" /> </h:outputText>
timeZone="Asia/Tokyo" コレ重要。
この方のブログ参照、ちまちまお世話になってます。
しっかし日付表示のある場所ごとに毎回指定するのもぬるぽっぽ。
デフォルトで東京時間に指定する方法ないか調べてみます。これから。
研修覚え書き
見た目のほーもなんとかなってきました。
ほんとはグラデーションとか使いたいんですけどねー。
フィルター使用しないとなると自分でgif画像作らないといけないのかな?
で、細かい問題が数点残ってます。
pre要素内の改行を生かしつつ改行(日本語ヘン…)
pre { white-space: -moz-pre-wrap; /* Mozilla */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS3 */ word-wrap: break-word; /* IE 5.5+ */ }
sessionで保持しているBean情報の取り出し方
public Object getManagedBean(String beanName) { FacesContext context = FacesContext.getCurrentInstance(); Object object = context.getApplication().getVariableResolver().resolveVariable(context, beanName); return object; }
これでreturnされているobjectはBean自体なので注意。
明示してないのにBeanの中のドレを参照してるんだーとゆーマヌケなハマりかたをしてましたorz
beanNameはfaces-config.xmlで設定した名前を入れる。
あとは必要になったところで
LoginBean login = (LoginBean)getManagedBean("loginBean"); user = login.getUser();
みたいに使えばOK!