我有样本字符串,如:
数据管理_商业IMS(信息管理系统)
数据管理_非结构化数据管理(文本文档,纸质表格等)
我通过input-move-boxes
从jsp页面传递字符串。所以在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
。我怎样才能避免这种情况并使其在第一种情况下像字符串一样工作?
答案 0 :(得分:1)
编辑:阅读更新后披露使用Liferay
问题的根源在于您从表单传递显示标签而不是键来识别它们。您应该按键传递表单选择,例如this:
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最终将值拆分为&#34;,&#34;。这解释了您所看到的行为。
BTW:LPS-42949的错误似乎已在最新的Liferay版本中修复。无论如何,这不是你问题的原因。