使用Struts2迭代器迭代JSON字符串 - 什么都没打印

时间:2014-09-21 14:40:07

标签: java json jsp struts2 ognl

我在Struts 2中创建了一个应用程序,用于通过使用Struts2迭代器迭代从Struts2会话获取的JSONObject对象进行显示,如下所示

<s:iterator var="menu" value="userMenu.get('permissions')">
   <s:property value="menu.name"/>
</s:iterator>

但我什么都没打印

如果Struts2迭代器无法实现,还有其他选择吗?

我的JSON如下所示

{
  "id": 10,
  "groupName": "manager",
  "permissions": [
    {
      "id": 18,
      "name": "Group 1",
      "modules": [
        {
          "id": 6,
          "name": "Company 1",
          "groupId": 18,
          "stat": true,
          "moduleGrpName": "Group 1"
        },
        {
          "id": 8,
          "name": "Company 2",
          "groupId": 18,
          "stat": true,
          "moduleGrpName": "Group 1"
        }
      ],
      "stat": "false"
    },
    {
      "id": 19,
      "name": "Group 2",
      "modules": [
        {
          "id": 17,
          "name": "Company 3",
          "groupId": 19,
          "stat": true,
          "moduleGrpName": "Group 2"
        },
        {
          "id": 15,
          "name": "Company 4",
          "groupId": 19,
          "stat": true,
          "moduleGrpName": "Group 2"
        }
      ],
      "stat": "false"
    }
  ]
}

修改

 public String validateLogin() throws Exception 
    {
        TableUser flag=hobjLoginauth.checkUsercredentials(userName, password);
        System.out.println("Flag :"+flag);
        if(flag == null!=true)
        {
            sessionmap.remove("logincheck");
            setSession(sessionmap);
            sessionmap.put("userId", flag.getId());
            sessionmap.put("user",flag.getUsername());
            sessionmap.put("userMenu", new JSONObject(userModulesServicesImpl.getDeSerialized(flag.getGroupId().getPermissions())));
            sessionmap.put("menuGroups",userModulesServicesImpl.getUserModules());
            return SUCCESS;
        }else{
            sessionmap.put("logincheck","1");
            return ERROR;
        }

    }

1 个答案:

答案 0 :(得分:1)

您可以将以下getter用于JSON

public Map getUserMenu(){     
  return JSONObject.fromObject(json);
}

你也可以使用Struts2实用程序

来做同样的事情
public Map getUserMenu(){
  Map res = null;
  try {
    Object o = JSONUtil.deserialize(json);
    res = (Map)o;
  } catch (JSONException e) {
    e.printStackTrace();
  }
  return res;
}

并通过

迭代地图
<s:iterator var="menu" value="userMenu.get('permissions')">
  <s:property value="#menu.name"/>
</s:iterator>

请注意,使用迭代器的变量不是必需的,但如果使用,则使用#从值堆栈上下文访问它。