2009年5月26日火曜日

Slim3でリソース表示(訂正)


すでにこの設定などは古くなっている可能性があります。

Slim3の開発はこんなブログより正式ドキュメントが有効です。
Slim3サイト
非公式と言われていますが充実した日本語サイトもあります。
Slim3日本語サイト



※以下コメントを受けまして、少し訂正を入れています。
 訂正と言うか注釈ですね。。。

Slim3を触っています。
構築中っていうことでまだ単純な機能が足りません。
※訂正:単純な機能ではなく、私のスキルが足りなかったようです。

ん。。。JSPにリソースを表示したい。。。
ってことでオリジナルで作ってみました。
おそらく近日本家で実装されますんで
※訂正:コメントより、作られるのではなくJSTLで既にあるようです。


taglib作成の参考として読んでください。

まずtldファイルを作成します。


<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">

<description>Mog resource library</description>
<display-name>Mog resource</display-name>
<tlib-version>1.1</tlib-version>
<short-name>res</short-name>
<uri>http://mog.ziro.bz/resource</uri>

<function>
<description>
resource bundle get
</description>
<name>get</name>
<function-class>bz.ziro.mog.jsp.Resource</function-class>
<function-signature>java.lang.String get(java.lang.String)</function-signature>
<example>
${f:get(param)}
</example>
</function>

</taglib>


で作成したところにあるfunction-classを生成します。


package bz.ziro.mog.jsp;

import java.util.ResourceBundle;

public final class Resource {

private static ResourceBundle resources = ResourceBundle.getBundle("application");

public static String get(String aKey) {
return resources.getString(aKey);
}
}


ResourceBundleの生成に使っている"application"はクラスパス+名称になります。
のでこの設定だとクラスパス直下にapplication.propertiesやapplication_ja.propertiesを
作成しておきます。※ResourceBundleは国際化されています。



<%@taglib prefix="res" uri="http://mog.ziro.bz/resource"%>

${res:get("mog.l.title")}


で表示することができます。
uriに指定するのはtldのuriに記述したURIです。
こういうtaglib作成があるんですね。Slim3のFunctionを参考にさせてもらいました。

TDDってもんを完全に守ったこともない僕にはまだまだ。。。
それでもコミッタを夢見るの巻きでした。

2009年5月25日月曜日

Slim3Struts廃止・・・

Struts本命の僕には悲しいニュースです。

ただ。。。

Seasar Conference 2009 Spring - 6/13(SAT), Tokyo

ここで面白い話が聞けそうです!
ちょっくら行く予定です。

2009年5月23日土曜日

HTMLにFlashを埋め込む

http://code.google.com/p/swfobject/

からswfobject.jsを取ってきて読み込みます。


<script type="text/javascript" src="assets/js/swfobject.js"></script>
<div id="flashcontent_container">
FlashPlayerがない
</div>


JavaSctiprなどで埋め込みます。


var so = new SWFObject("MogPlayer.swf", "MogPlayer", "260", "400", "9");
so.addParam("allowScriptAccess", "always");
so.addParam("menu", "false");
so.addParam("scale", "noscale");
so.setAttribute("id", "playerWrapper");
so.write("flashcontent_container");

SWFID = "playerWrapper";

FlexでRadioButton

Flexでラジオボタンを設定します。


<mx:RadioButtonGroup id="answer"/>
<mx:RadioButton id="answer1" groupName="answer" value="1" label="選択肢1" width="100%"/>
<mx:RadioButton id="answer2" groupName="answer" value="2" label="選択肢2" width="100%"/>
<mx:RadioButton id="answer3" groupName="answer" value="3" label="選択肢3" width="100%"/>
<mx:RadioButton id="answer4" groupName="answer" value="4" label="選択肢4" width="100%"/>


でラジオボタンを作成します。
その後スクリプトなどでRadioButtonGroupで指定したIDのselectedValueを利用して
どれが選択されているかがわかります。


if ( nowAnswer == answer.selectedValue ) {
Alert.show("正解!");
} else {
Alert.show("ブー");
}

2009年5月16日土曜日

Javaでセッション管理

JavaのWebアプリでオブジェクトをセッションに
登録、削除した時にイベントを発生する場合
HttpSessionBindingListenerをimplementするとイベントを発生することができます。


public class Account implements HttpSessionBindingListener {

@Override
public void valueBound(HttpSessionBindingEvent arg0) {
}

@Override
public void valueUnbound(HttpSessionBindingEvent arg0) {
}
}


って感じです。

DataNucleusでJDBC接続

datanucleus.propertiesを作成して

javax.jdo.PersistenceManagerFactoryClass=org.datanucleus.jdo.JDOPersistenceManagerFactory

javax.jdo.option.ConnectionDriverName=org.hsqldb.jdbcDriver
javax.jdo.option.ConnectionURL=jdbc:hsqldb:hsql://localhost/sealion_db
javax.jdo.option.ConnectionUserName=sa
javax.jdo.option.ConnectionPassword=
javax.jdo.option.Mapping=hsql


クラスパスのトップにおいて

private static final PersistenceManagerFactory pmfInstance =
JDOHelper.getPersistenceManagerFactory("datanucleus.properties");
public static PersistenceManagerFactory get() {
return pmfInstance;
}

でPersistenceManagerFactoryを取得します。

これと同様にMETA-INF/jdoconfig.xmlを作成して

<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

<persistence-manager-factory name="transactions-optional">
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
<property name="javax.jdo.option.ConnectionURL" value="appengine"/>
<property name="javax.jdo.option.NontransactionalRead" value="true"/>
<property name="javax.jdo.option.NontransactionalWrite" value="true"/>
<property name="javax.jdo.option.RetainValues" value="true"/>
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
</persistence-manager-factory>
</jdoconfig>


と行います。
その場合は

private static final PersistenceManagerFactory pmfInstance =
JDOHelper.getPersistenceManagerFactory("transactions-optional");
public static PersistenceManagerFactory get() {
return pmfInstance;
}

って感じになります。
何個もセッションを用意する場合は、指定子(transactions-optional)を
変更して追加します。

2009年5月15日金曜日

HSQLDBとDataNucleus

hsqldb-1.9.0-alpha2を使ってたら
スキーマを作成するところで

java.sql.SQLException: unexpected token: NULL

と出ます。
DataNucleusのせいだと思っていたのですが
良く調べたら、create tableで

"NAME" VARCHAR(256) NULL,

みたいな指定ができないようです。
何か久々に無駄につかれた。
※同時に2個調査しようとするのが悪い