2013-01-21 43 views
6

我正在使用struts2-json-plugin-2.2.3.jar。并试图序列化类的filterList属性是这样的:在Json中includeProperties struts2插件不工作

struts.xml代码

<action name="jsonUserFilterListAction" class="com.my.fitnessb.actions.UserArticlesAction" method="filterList"> 
     <result name="success" type="json"> 
      <param name="includeProperties">filterList</param> 
     </result> 
</action> 

Action类

public class UserArticlesAction extends ActionSupport implements SessionAware, ServletRequestAware { 

    private List<FilterType> filterList; 
    HttpServletRequest request; 

    public String filterList() { 
    filterList = new ArrayList<FilterType>(); 
    filterList.add(new FilterType(10, "Latest Articles")); 
    filterList.add(new FilterType(1, "Trending Articles")); 
    filterList.add(new FilterType(2, "Top Rated Articles")); 
    filterList.add(new FilterType(3, "Most Viewd Atricles")); 
    filterList.add(new FilterType(4, "All Atricles")); 
    return SUCCESS; 
    } 
    //setter & getter of filterList 
} 

,但我不能够得到过滤式类的这个属性。

+0

就可以得到价值,如果帕拉姆'includeProperties'未使用? – Quincy

+0

如果不使用参数includeProperties,我将得到seralize action class中的所有属性 –

回答

6

假设在字段中FilterType被命名为iddesc

尝试

<param name="includeProperties"> 
filterList\[\d+\]\.id, 
filterList\[\d+\]\.desc 
</param> 
+1

非常感谢,它为我工作。 –

+0

没问题,虽然有效,但我认为列出每个属性很麻烦......:/ – Quincy

3

Struts2-json插件将seralize您的动作类中的所有动作属性。

它是我使用struts2-json-plugin时遇到的一个问题。尽管plugin-doc显示了includeProperties参数的工作示例,但它从未适用于我,并且在进行如此多的试用和搜索之后从未这样做过。所以我不得不使用excludeProperties从序列化中删除非必需的内容,而不是指定我想要序列化的内容。

+0

ohh ...是这样吗?这是非常糟糕的,我认为,所以我必须使用excludeProperties从序列化中删除非必需的内容,好吧thanx ...我会检查它,并会返回给你,如果它会工作。再次感谢你...朋友 –

+0

我试过用json插件2.3.8,includeproperties工作得很好。如果它不能在你的项目中工作,你可以跟踪json插件的源代码(org.apache.struts2.json.JSONWriter),这很容易。 – SalutonMondo

0

如果喜欢味道注释

@ParentPackage("json-default") 
@Namespace("/") 
@ResultPath(value = "/") 
@Results({ @Result(name="firstDir",type="json" 
,params = {"includeProperties","fileList\\[\\d+\\]"} 
) }) 

fileList = new ArrayList<String>(); 
     for (File img : folder.listFiles()) { 
      fileList.add(img.getName()); 
     } 
return "firstDir"