Struts 2 json注释

时间:2010-11-23 16:03:37

标签: json annotations struts

我一直想使用注释配置创建一个带有json返回类型的struts 2。我已经使用像这个代码片段的xml类型配置成功创建了这个:

<action name="FetchJSON" class="com.stikiflem.Json" method="getJSON">
        <result type="json"/>
</action>

我已经发布了一个使用xml-type配置的工作演示 http://stikiflem.wordpress.com/2008/08/27/struts-2-json-sample/

但是如何将其转换为注释?这是我的示例类:

public class JsonAction extends ActionSupport{

private List sampleList;

public String execute() {

    sampleList = new ArrayList();

    sampleList.add("stikiflem sample 1");
    sampleList.add("stikiflem sample 2");
    sampleList.add("stikiflem sample 3");
    sampleList.add("stikiflem sample 4");

    System.out.println("----------------------------------------------");
    System.out.println("----------------------------------------------");
    System.out.println("-sample111List:" + sampleList.toString());
    System.out.println("----------------------------------------------");
    System.out.println("----------------------------------------------");

    return SUCCESS;
}


@Action(value="FetchJSON", results = {
     @Result(name="success", type="json")
 })  

public String getJSON(){
 System.out.println("get jason ko");
 return execute();
}

public List getSampleList() {
    return sampleList;
}

public void setSampleList(List sampleList) {
    this.sampleList = sampleList;
}



}

尝试通过“json.action”调用它,它当然会触发execute()方法,但不能返回json类型。通过“FetchJSON”调用它不会做任何事情。这个问题听起来很愚蠢,但网上只有少量的教程和详细注释示例。我已经阅读了Manning Struts 2的动作书,但它只是勉强划伤表面,只是典型的hello world和sucess,输入重定向。

我搜索了网的高低,到目前为止,我还没有看到任何。我知道有很多程序员也在搜索这个。希望有人可以告诉我这个。我已经好好打了几天。 :(

2 个答案:

答案 0 :(得分:4)

这里提出了类似的问题: Struts2 JSON Plugin With Annotations

我按照以下方式对您的行为进行了注释:

@ParentPackage("json-default")
@Result(name="success", type="json")
public class JsonAction extends ActionSupport {

答案 1 :(得分:1)

获取JAR依赖关系

   <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.3.20</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>2.3.20</version>
</dependency>

会议插件

自2.1版以来,Convention Plugin与Struts捆绑在一起,取代了Codebehind Plugin和Zero Config插件。它提供以下功能:

按包命名约定的行动地点

按命名约定的结果(JSP,FreeMarker等)位置

URL命名约定的类名

包名称到命名空间约定

使用注释覆盖动作名称

命名空间覆盖使用注释

使用注释覆盖XWork包

设置父资料包

使用注释将包设置为json-default以支持JSON。

 @ParentPackage("json-default")

设置结果类型

  @Result(name="success", type="json")

在web.xml中定义过滤器

在web.xml中定义struts 2过滤器,并通过定义actionPackages传递动作类。

行动类

在此类数据中转换为JSON格式。

   @Result(name = "success", type = "json")
   @ParentPackage("json-default")
   public class StrutsJsonAnnotationAction extends ActionSupport {

private static final long serialVersionUID = 3516335522937177571L;
private String name = "Narendra Modi";
private String designation = "Prime Minister of India";
private String dob = "17 September 1950";
private String[] education = {"MA", "BA"};
private List<String> favBooks = new ArrayList<String>();
private Map<String, String> assumedOffice = new HashMap<String, String>();

public StrutsJsonAnnotationAction() {

    favBooks.add("Ramayan");
    favBooks.add("Geeta");

    assumedOffice.put("President", "Pranab Mukherjee");
    assumedOffice.put("Preceded by", "Manmohan Singh");
}

@org.apache.struts2.convention.annotation.Action("/india")
@Override
public String execute() {
    return SUCCESS;
}

<强>来源: http://www.websparrow.org/struts/struts2-and-json-integration-using-annotation-example