В Spring MVC я могу иметь раскрывающийся список с сохранением объекта? - PullRequest
0 голосов
/ 30 июня 2010

В Spring MVC я хочу иметь форму с раскрывающимся списком html, которая поддерживается списком объектов домена, но отображает только одно поле из объектов. Когда форма отправлена, я хочу иметь возможность получить весь объект. Могу ли я сделать это?

Ответы [ 2 ]

1 голос
/ 04 августа 2011

В этом посте объясняется, что именно вы хотите сделать: https://www.credera.com/blog/technology-insights/java/spring-mvc-custom-property-editors/. Я потратил много времени на поиски точно такого же вопроса, и AJ Angus на Credera имеет лучшее объяснение, которое я видел в Интернете.

Подводя итог, вы должны указать Spring, как преобразовать значения параметров в форме строки в теге select обратно в объект.Это делается путем помещения значений элементов в качестве идентификаторов объекта: поэтому у Spring теперь есть идентификатор сотрудника, но как Spring меняет идентификатор обратно на сотрудника, когда пользователь нажимает кнопку отправить?Это с помощью PropertyEditor, который не очень хорошо объясняет документация Spring:

public class EmployeeNamePropertyEditor extends PropertyEditorSupport {
EmployeeDAO employeeDAO;

public EmployeeNamePropertyEditor(EmployeeDAO employeeDAO)   {
    this.employeeDAO = employeeDAO;
}

public void setAsText(String text)   {
    Employee employee = new Employee();
    employee = employeeDAO.getEmployee(Long.parseLong(text));
    setValue(employee);
}
}

Затем вы используете initBinder, чтобы сообщить контроллеру, что propertyEditor существует:

@InitBinder
public void initBinder(WebDataBinder binder)    {
    binder.registerCustomEditor(Employee.class, new        
    EmployeeNamePropertyEditor(employeeDAO));
}

Тогда все готово!Проверьте ссылку для лучшего и более подробного объяснения.

1 голос
/ 30 июня 2010

Вполне возможно, если я вас правильно понял ...

Модель

public class Foo() {
    private String result;
    public String getResult() { return result; }
    public void setResult(String result) { this.result = result; }
}

Контроллер

Это использует аннотации.Если вы не понимаете, что это делает, вам, вероятно, следует ознакомиться с документацией Spring.@ModelAttribute("fooResults") будет доступно для вашего просмотра, чтобы использовать его для выпадающих элементов.@ModelAttribute("command") Foo foo автоматически "засосет" все, что вы выбрали в раскрывающемся списке.

@Controller
public class FooController() {

    @ModelAttribute("fooResults")
    public List<String> fooResults() {
        // return a list of string
    }

    @RequestMapping(method = RequestMethod.GET)
    public String get(@ModelAttribute("command") Foo foo) {
        return "fooView";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String post(@ModelAttribute("command") Foo foo) {
        // do something with foo
    }

Просмотр

Используя магию библиотеки тегов формы, выможет привязать выпадающий список (form:select) к свойству результата модели и заполнить элементы fooResults.

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

<form:form commandName="command">
    <form:select path="result">
        <form:options items="${fooResults}" itemLabel="result" itemValue="result"/>
    </form:select>
    <input type="submit" value="submit"/>
</form>

. Все это предполагает, что вы как бы знаете, что делаете:) Если нет, проверьте http://static.springsource.org/docs/Spring-MVC-step-by-step/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...