[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 メーリングリストの案内