这是我的struts动作
@Action("/trylogin")
@ParentPackage("json-default")
@Result(type = "json", params = { "includeProperties", "msg, productsList" })
public class Login extends ActionSupport {
private static final long serialVersionUID = 1L;
private String utilisateur;
private String motdepasse;
private String msg;
private ArrayList<Article> productsList = new ArrayList<Article>();
@Autowired
private Dao dao;
public String execute() {
if (dao.validCredentials(utilisateur, motdepasse)) {
System.out.println("USER FOUND");
productsList = dao.fetchProducts();
msg = "success";
} else {
System.out.println("ERREUR");
msg = "error";
}
return ActionSupport.SUCCESS;
}
public ArrayList<Article> getProductsList() {
return productsList;
}
public String getMsg() {
return msg;
}
这是我的ajax帖子:
$.post({
url: "trylogin",
data: {
utilisateur: name,
motdepasse: password
}
}).done(function(data) {
console.log(data.productsList.length);
}).fail(function( jqXHR, textStatus ) {
console.log("Fail");
})
我想获取我的productsList。在我的Action中,列表已正确加载。但是,一旦我console.log(data.productsList)
它就是空的。
如何从我的struts动作中获取productsList到我的javascript?
我的productsList是一个具有各种属性的对象列表,如name / id / color ...
答案 0 :(得分:1)
您需要在允许的属性的白名单中列出Article
的每个属性。
我们说文章有id
,name
和color
属性,配置如下:
@Result(type = "json", params = { "includeProperties",
"msg,
productsList\\[\\d+\\]\\.id,
productsList\\[\\d+\\]\\.name,
productsList\\[\\d+\\]\\.color"})
这就是为什么我更喜欢使用root
object代替includeProperties
,即使在您的情况下您需要找到一种方法来处理msg
(可能可能是基于List的结果组成客户端。但是)。
答案 1 :(得分:1)
参数includeProperties
是正则表达式列表。当你使用参数productsList
时,json序列化程序只能找到这个属性,但是当进一步解析它的元素时,它们都不包括在内。如果将此参数与结果一起使用,则只有与表达式匹配的属性才会包含在json输出中。
您需要在json结果中配置includeProperties
。例如
@Result(type="json", params = {"includeProperties", "msg,
productsList\\[\\d+\\]\\.id,productsList\\[\\d+\\]\\.name,productsList\\[\\d+\\]\\.color"})
请注意,特殊字符是双重转义。