Итерация строки JSON с использованием итератора Struts2 - ничего не печатается

Я создал приложение в Struts 2 для отображения путем итерации объекта JSONObject, взятого из сеанса Struts2, с помощью итератора Struts2, как показано ниже.

<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;
        }

    }

person Alex Man    schedule 21.09.2014    source источник
comment
Если это строка, то итерация по ней (по существу) бессмысленна. Перебирать структуру данных, например массив. Вам потребуется предоставить дополнительную информацию.   -  person Dave Newton    schedule 21.09.2014
comment
я сделал это как JSONObject, теперь мы можем сделать итерацию, используя ‹s:iterator   -  person Alex Man    schedule 21.09.2014


Ответы (1)


Вы можете использовать следующий геттер для 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>

Обратите внимание, что использование переменной итератора не обязательно, но если она используется, то доступ к ней осуществляется из контекста стека значений с использованием #.

person Roman C    schedule 21.09.2014
comment
что это за библиотека json - person Alex Man; 21.09.2014
comment
json-lib-2.3-jdk15.jar - person Roman C; 21.09.2014
comment
Эта библиотека поставляется с плагином struts2-json, если вы используете этот плагин, то он использует эту библиотеку как зависимость. - person Roman C; 21.09.2014
comment
я обновил свой ответ, там я уже вызываю метод validateLogin, на котором отображается мое представление, так как я могу использовать вышеупомянутый метод - person Alex Man; 21.09.2014
comment
Если вы хотите узнать, как работать с сеансом, см. это или этот ответ и проголосуйте за него, если он вам помог. - person Roman C; 21.09.2014
comment
Можете ли вы предложить какое-либо решение для этого stackoverflow.com/questions/25975679/ - person Alex Man; 22.09.2014
comment
Давайте продолжим это обсуждение в чате. - person Alex Man; 22.09.2014