我一直想使用注释配置创建一个带有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,输入重定向。
我搜索了网的高低,到目前为止,我还没有看到任何。我知道有很多程序员也在搜索这个。希望有人可以告诉我这个。我已经好好打了几天。 :(
答案 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