2013-01-21 50 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"