Тег '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 результат по этому методу.

Другие вопросы по тегам