Как мне использовать фасонные формы в Spring MVC? - PullRequest
0 голосов
/ 24 февраля 2012

Я новичок в Spring MVC (3.1.1). Исходя из мира Rails и Struts1, который является.

В Struts наши FormBeans автоматически отображаются на наши контроллеры. Например:

# JS file
ExtJS.ajax({action:'update', value:42});

Тогда наш контроллер может:

bean.getAction();   // 'update'
bean.getValue();    // 42

Мы создаем экземпляр компонента, как:

public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    MyBean bean = (MyBean) form;
    ....
}

Пожалуйста, прости мое невежество, но как бы я сделал то же самое в Spring MVC?

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

В jsp сделайте что-то вроде этого:

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

<form:form name="frmFoo" id="frmFoo" action="/FormSubmitUrl" method="POST" modelAttribute="foo">
   <form:select path="myField">
   <form:errors path="myField" />
</form:form>

И просто добавьте объект поддержки в модель в методе вашего контроллера:

@RequestMapping(value = "/MyFooForm", method = RequestMethod.GET)
public String getFoo(final Model model)
{
   model.addAttribute("foo", foo);
   return "fooForm.jsp";
}
0 голосов
/ 22 июня 2013

Я искал этот ответ сегодня на основе некоторого кода в проекте, который я унаследовал.Я обнаружил, что если вы создадите действие контроллера на multiActionController.Значения формы могут быть сопоставлены с bean-компонентом, который будет третьим параметром в вашем действии обработчика.

В моем случае у меня был такой контроллер

public void submit(HttpServletRequest request, 
                    HttpServletResponse response, SomeBean sb) {
{
    //do something with sb - SomeBean
}

Моя проблема заключалась в выяснениикак значения в моей форме были сопоставлены с действием контроллера.Там не было никакой ссылки на SomeBean в моей форме JSP.Оказывается, Spring работает с магией, основываясь на параметрах действия контроллера и именах, используемых в форме.Он в основном отображает значения в форме в bean-компонент, который используется в качестве третьего параметра в методе действия.

Например, в моем SomeBean есть поля с именами byday и bymonth.Он также имеет соответствующие методы установки и получения byday и bymonth (т.е. getBymonth (), setBymonth).В моем for my submit действие отображается на submit, и у меня есть входные значения для byday и by month, например так:

<select id="weekly_option" name="byday">
            <option value="MON">Monday</option>
            <option value="TUE">Tuesday</option>
            <option value="WED">Wednesday</option>
            <option value="THU">Thursday</option>
            <option value="FRI">Friday</option>
            <option value="SAT">Saturday</option>
            <option value="SUN">Sunday</option>
          </select>

Мне пришлось немного покопаться в том, как именно выполнялись сопоставления.Я заглянул в исходный код MultiActionController, чтобы увидеть, что если он делает следующее:

  1. Контроллер выясняет, есть ли у вас третий параметр в вашем действии (он не должен иметь тип HttpSession).
  2. Затем MultiActionController выводит экземпляр третьего параметра (SomeBean).На основе значений http-запроса он передает все значения из HttpServleRequest в объект SomeBean.

На данный момент кажется, что он работает только со свойствами, являющимися строками.Я полагаю, что вам придется как-то расширять MVC, если вы хотите работать со свойствами, отличными от строк внутри вашего компонента.

0 голосов
/ 24 февраля 2012

Собираюсь, Spring MVC - Rails. Мне нравится Rails намного лучше :-). Существует множество обучающих программ для Spring MVC. Но у весны есть хороший учебник, которому вы можете следовать. Но для начала вам придется начать с spring-dispatch-servlet.xml. Там вы определите свою связь между представлениями, контроллером и формой. Например, в следующем фрагменте:

<bean name="/priceincrease.htm" class="springapp.web.PriceIncreaseFormController">
    <property name="sessionForm" value="true"/>
    <property name="commandName" value="priceIncrease"/>
    <property name="commandClass" value="springapp.service.PriceIncrease"/>
    <property name="validator">
        <bean class="springapp.service.PriceIncreaseValidator"/>
    </property>
    <property name="formView" value="priceincrease"/>
    <property name="successView" value="hello.htm"/>
    <property name="productManager" ref="productManager"/>
</bean

Контроллер - это PriceIncreaseFormController, а priceIncrease - эквивалентный объект команды. Соответствующее представление, т.е. JSP будет иметь

<form:form method="post" commandName="priceIncrease"> <table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5"> <tr> <td align="right" width="20%">Increase (%):</td> <td width="20%"> <form:input path="percentage"/> </td> <td width="60%"> <form:errors path="percentage" cssClass="error"/> </td> </tr> </table>

Но я думаю, что вы могли бы получить полную картину из этого места, где я взял код из http://static.springsource.org/docs/Spring-MVC-step-by-step/part4.html#step4.5 и место, где вы можете получить пример кода базы Spring MVC: https://src.springframework.org/svn/spring-samples/mvc-basic

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