Почему String [] дает разную длину и разделяет заданную строку?

1

У меня есть примеры строк:

Data Management_Commercial IMS (система управления информацией)

Data Management_Non-структурированное управление данными (текстовые документы, бумажные формы и т.д.)

Я передаю строки со страницы jsp через input-move-boxes. Поэтому на странице jsp у меня есть:

List<KeyValuePair> leftDataManagementList = new ArrayList<KeyValuePair>();
List<KeyValuePair> rightDataManagementList = new ArrayList<KeyValuePair>();
rightDataManagementList.add(new KeyValuePair(attribute.getAttributeListName()+"_"+attribute.getAttributeListValue(), attribute.getAttributeListValue()));
leftDataManagementList.add(new KeyValuePair(attributeMaster.getAttributeListName()+"_"+attributeMaster.getAttributeListValue(), attributeMaster.getAttributeListValue()));

Поле input-move-box в этом случае

<liferay-ui:input-move-boxes
            leftBoxName="availabledm"
            leftTitle="Data Management Available"
            leftList="<%=leftDataManagementList %>"
            rightBoxName="selecteddm"
            rightTitle="Data Management Selected"
            rightList="<%= rightDataManagementList%>"     
        />

В классе java они извлекаются в переменной String[] selecteddm.

String[] selecteddm = ParamUtil.getParameterValues(request, "selecteddm");

Но я пропускаю одну строку за раз. Поэтому, когда я храню первую строку Data Management_Commercial IMS (Information Management System) в переменной. Я получаю ожидаемые результаты.

System.out.println("Length:" +selecteddm.length);//Length:1
System.out.println(Arrays.toString(selecteddm));//[Data Management_Commercial IMS (Information Management System)]

int count = 0;
for(String str:selecteddm){
     System.out.println(str);//Data Management_Commercial IMS (Information Management System)
     System.out.println(count++);//0
}

Теперь я получаю проблему со второй строкой Data Management_Non-structured Data Management (Text Documents, Paper Forms, etc.), Поскольку она разделяется на отдельные строки после запятой. В этом случае,

System.out.println("Length:" +selecteddm.length);//Length:3

//This print seems fine
System.out.println(Arrays.toString(selecteddm));//[Data Management_Non-structured Data Management (Text Documents, Paper Forms, etc.)]

int count = 0;
for(String str:selecteddm){
   System.out.println(str);
   System.out.println(count++);
}

Цикл в этом случае печатает:

Data Management_Non-structured Data Management (Text Documents
0
Paper Forms
1
etc.)
2

Почему это происходит именно так? В результате str.split("_")[1] в строке во втором случае генерирует ArrayIndexOutOfBoundsException. Как я могу избежать этого и заставить его работать как строка в первом случае?

Это связано с этой ошибкой? https://issues.liferay.com/browse/LPS-42949

  • 0
    Какие аргументы вы передаете String.split () в первый раз?
  • 0
    Когда вы говорите «это разделяется на отдельные строки после запятой». - что это разделяет? Где происходит этот раскол?
Показать ещё 8 комментариев
Теги:
string
arrays

1 ответ

1

EDIT: после чтения обновления, раскрывающего использование Liferay

Корень проблемы состоит в том, что вы передаете ярлыки отображения из формы вместо ключа для их идентификации. Вместо этого вы должны передать выбор формы по ключу, например:

List<User> userList = ...
List leftList = new ArrayList();
List rightList = new ArrayList();
for (int k = 0; k < userList.size(); k++) {
    User user = (User) userList.get(k);
    leftList.add(new KeyValuePair(String.valueOf(user.getUserId()), user.getScreenName()));
}

Второй аргумент KeyValuePair отображается пользователю, первый аргумент - это ключ, который отправляется как часть одного параметра запроса с запятой (содержащий все ключи выбранных элементов). Вы должны определить выбор, основанный на ключах, а не на ярлыках дисплея.

ParamUtil.getParameterValues в конечном счете разделяет значение на ",". Это объясняет поведение, которое вы видите.

Кстати: эта ошибка LPS-42949 кажется исправленной в последней версии Liferay. В любом случае это не является причиной ваших проблем.

  • 0
    Я отредактировал вопрос с дополнительной информацией о том, как данные передаются из jsp в java.
  • 0
    Я думаю, что была причина, по которой я также rightDataManagementList.add(new KeyValuePair(attribute.getAttributeListName()+"_"+attribute.getAttributeListValue(), attribute.getAttributeListValue())); значение к ключу rightDataManagementList.add(new KeyValuePair(attribute.getAttributeListName()+"_"+attribute.getAttributeListValue(), attribute.getAttributeListValue())); , liferay.com/community/forums/-/message_boards/message/...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню