[mayaa-user:877] Re: JavaBeanのプロパティへのアクセスについて(要望)
しましま
[E-MAIL ADDRESS DELETED]
2010年 1月 6日 (水) 19:19:48 JST
こんばんは、しましまです。
いろいろ説明不足なところがあって申し訳ありません。
で、その後調べを進めた結果新たに分かった事もあるので、合わせて説明します。
まず、不具合が発生する条件は、Scala形式のgetterが実装されていることのようです。
public class MyBean {
private String name = "hoge";
public String name() { return name; }
}
このように、フィールドがprivateで、フィールドと同じ名前のpublicなメソッドが実装されていた場合、これをmayaaから
<m:write m:id="boke" value="${bean.name}"/>
このようにしてアクセスすると、
function name() {/*<br />java.lang.String name()<br />*/}<br />
上記のように、JavaScriptの断片のような文字列が返ってきます。
また、条件によっては、ただの空文字になることもある見たいです。
この場合、Java形式のgetterがあっても、無視されるようです。
また、Scala形式のgetterがあっても、フィールドがpublicなら、問題は発生しません。
それから、Scalaが生成するJavaコードは、正確には下記のようになります。(昨日書いたコードは正確じゃありませんでした)
//
// Scalaのコード
//
class MyBean {
var name = "hoge"
}
//
// Scalaが生成したJavaコード
//
public class MyBean extends java.lang.Object implements scala.ScalaObject {
private String name;
public MyBean() { name = "hoge"; }
public String name() { return name; }
public void name_$eq(String newName) { name = newName; }
public int $tag() throws java.rmi.RemoteException { ... }
}
このように、scalaのクラスは、必ずscala.ScalaObjectをimplementsしています。
以上、よろしくお願いします。
> suga です。
>
> On Monday, January 4, 2010, しましま <[E-MAIL ADDRESS DELETED]> wrote:
>> public class MyBean {
>>
>> private int id = 10;
>>
>> public int getId() { return id; } // getter
>>
>> public void setId(int newId) { id = newId; } // setter
>>
>> }
>>
>> これをMayaaから以下のようにしてアクセスすると、正しい結果が出力されません。
>>
>> <m:write m:id="hoge" m:value="${mybean.id}"/>
>
> JavaBeanは対応しています。(rhinoまかせですが)
> 正しい結果が出ないとはどのような状態でしょうか。
>
>
>> そういうことから、可能ならばScala形式のアクセッサをサポートして頂けるとなお助かります。
>>
>> // Scalaが生成するJavaクラス
>> public class MyBean {
>>
>> private int id = 10;
>>
>> public int id() { return id; } // getter
>>
>> public void id_$eq(int newId) { id = newId; } // setter
>>
>> }
>
> こちらは標準としては良くないと思います。
> リフレクションで存在チェックしないといけませんから。
> DynaBeanのようにinterfaceでもあれば良いのですけど。
>
> 独自にカスタマイズされるのであれば、
> ScriptEnvironmentとWrapFactoryの実装あたりで
> 対応できます。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/mayaa-user/attachments/20100106/859ac7a5/attachment.html>
mayaa-user メーリングリストの案内