Тег 'select', поле 'list', name 'uuid': Запрошенный ключ списка 'deptList' не может быть разрешен как тип коллекции / массива / карты / перечисления / итератора
У меня проблема с struts2, это происходит только тогда, когда есть ошибка проверки (это не происходит, когда я загружаю свою страницу в первый раз, и не происходит, если ошибка проверки не происходит). Если я удаляю теги select, он работает нормально и показывает сообщения об ошибках проверки после отправки формы, но мне нужны эти выборки, и они имеют динамическую информацию из БД, поэтому их необходимо предварительно загружать каждый раз, когда отображается моя форма. Я пытался поставить deptList
а также roleList
в хранилище значений или положить их на сессию, то же самое произошло.
Это часть кода класса действий:
private List<DeptModel> deptList;
private List<RoleModel> roleList;
public List<RoleModel> getRoleList() {
return roleList;
}
public void setRoleList(List<RoleModel> roleList) {
this.roleList = roleList;
}
public List<DeptModel> getDeptList() {
return deptList;
}
public void setDeptList(List<DeptModel> deptList) {
this.deptList = deptList;
}
public String input() {
roleList = roleEbi.getAll();
this.setRoleList(roleList);
deptList = deptEbi.getAll();
this.setDeptList(deptList);
if (empModel.getUuid() != null) {// for data display when doing modify
empModel = empEbi.get(empModel.getUuid());
roleUuids = new Long[empModel.getRoles().size()];
int i = 0;
for (RoleModel temp : empModel.getRoles()) {
roleUuids[i++] = temp.getUuid();
}
}
return INPUT;
}
public String save(){
if(empModel.getUuid() == null ){
empEbi.save(empModel,roleUuids);
}else{
empEbi.update(empModel,roleUuids);
}
return TO_LIST;
}
Это страница JSP:
<s:form action="emp_save" method="post" onsubmit="return checkForm();">
<s:textfield id="username" name="empModel.userName" />
<s:textfield id="password" size="25" name="empModel.pwd"/>
<s:select name="empModel.deptModel.uuid" list="deptList" style="width:190px" listKey="uuid" listValue="name" />
<s:checkboxlist name="roleUuids" list="roleList" listKey="uuid" listValue="name"/>
<a href="javascript:document.forms[0].submit()"><img src="images/save.jpg" border="0" width="81px"/></a>
</s:form>
Это ошибка из отчета о стойках:
тег 'select', поле 'list', name 'empModel.deptModel.uuid': Запрошенный ключ списка 'deptList' не может быть разрешен как тип collection/array/map/enumeration/iterator. Пример: люди или люди.{Имя}
Это моя проверка XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="empModel.userName">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>User Name can not be null ~~~</message>
</field-validator>
</field>
<field name="empModel.pwd">
<field-validator type="requiredstring">
<message>Password can not be null ~~~</message>
</field-validator>
</field>
</validators>
1 ответ
При отправке формы ошибки проверки препятствуют выполнению действия, потому что workflow
перехватчик возвращает результат INPUT. Вы можете настроить этот перехватчик, добавив аннотацию к методу действия
@InputConfig(methodName="input")
public String save(){
if(empModel.getUuid() == null ){
empEbi.save(empModel,roleUuids);
}else{
empEbi.update(empModel,roleUuids);
}
return TO_LIST;
}
Это вызовет метод input
от перехватчика для инициализации списков перед возвратом INPUT
результат по этому методу.