2

アクションのプロパティを評価し、その値をアノテーション内で使用したいだけです。以下はまさに私が使いたいところです。

実行時にexcludePropertiesパラメーターを定義したいと思います。

現在アクションで機能している次のアノテーションについて考えてみます。

    @Result(name = "success", type = "json", params = {"root", "model", "excludeProperties", "myCollection"})

アクションモデルには、シリアル化したくないmyCollectionコレクションがあります。

ただし、除外文字列を作成したいと思います(今のところ文字列で十分です)。

除外するゲッターセッターを作成すると、次のアノテーションが機能することが期待されます(機能しません)。

@Result(name = "success", type = "json", params = {"root", "model", "excludeProperties", "${exclusion}"})

何か案は?

アノテーション内のパラメーターを解決することを示す、この回答に似たアクションを作成しました。名前空間から値を抽出するために名前付き変数パターンマッチャーを使用しています...しかし、何をしてもこのパラメーターを設定できないようです。

4

1 に答える 1

1

問題の一部は、エンティティオブジェクトを操作していて、コレクションのシリアル化が問題であったことです。独自のカスタムJSON結果タイプを使用すると、好きなことを実行できます。jsonModel用のゲッターセッターを作成したので、そこで必要なものを作成しました。flexjsonにコレクションを明示的に含める必要があるため、遅延初期化エラーについて心配する必要はありません。したがって、プリミティブ(私が行った)だけが必要な場合は、flexjsonが最適です。

私のニーズに合ったflexjsonを使用したこの非常に単純な結果タイプ:

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.util.ValueStack;
import flexjson.JSONSerializer;
import java.io.PrintWriter;
import org.apache.struts2.ServletActionContext;


public class Kjson implements Result {

    @Override
    public void execute(ActionInvocation invocation) throws Exception {
        ServletActionContext.getResponse().setContentType("text/plain");
        PrintWriter responseStream = ServletActionContext.getResponse().getWriter();
        ValueStack valueStack = invocation.getStack();
        Object jsonModel = valueStack.findValue("jsonModel");
        //create json and put it into response stream
        responseStream.println(new JSONSerializer().exclude("class").serialize(jsonModel));
    }
}
于 2013-04-27T05:54:31.217 に答える