簡體   English   中英

Spring - 使用一個控制器處理多個表單

[英]Spring - handle multiple forms submit with one controller

是否可以讓一個控制器在彈簧中處理多種形式?

例如,我有3個步驟注冊,用“/ register”url映射。 是否可以只有一個RegisterController可以處理所有注冊的表單提交?

你可以使用多動作控制器。在Spring Single Controller Handel Multipal方法中通過方法名稱解析器

 <bean id="id" class="controller class"> <property name="name"><ref bean="service Name"/></property > <property
 name="methodNameResolver"><ref bean="name of Resolver"/></property>
 </bean>
 ------------------------------------------------------------------------ <bean id="name of Resolver"
 class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
 <property name="mappings"> <props> <prop
 key="/url.com">MethodName</prop> </props> </property> </bean> This can
 be Help you use single controller
     ------------------------------------------------------------------------

這取決於您正在使用的控制器的樣式。 如果您使用Spring 2.0樣式的表單控制器(例如SimpleFormControllerAbstractFormController的子類),那么您可能會遇到一些困難。 但是,如果你使用的是Spring 2.5風格的@Controller ,那么它們非常靈活,你應該能夠在一個控制器類中處理你想要的任何復雜性。

就像skaffman說你可以使用非常靈活的@Controller。 但是如果你正在編寫一個向導,你應該看一下AbstractWizardFormController。 它處理向導的所有步驟和驗證。 它還為每個表單提交保留相同的后備對象。 當向導處於最終操作時,您可以獲取此對象並在數據庫中更新它。

你可以在以下網址找到一個例子: http//www.cs.bham.ac.uk/~aps/syllabi/2004_2005/issws/h04/spring.html#AbstractWizardFormController

問題例如,我有3個步驟注冊,用“/ register”url映射。 是否可以只有一個RegisterController可以處理所有注冊的表單提交?

建議的解決方案: Spring 3 - 使用servlet映射到控制器的Spring-mvc控制器。 使用您的網址請求中的映射,您將始終轉到同一個控制器。

您可以通過Spring DispatcherServlet創建映射到控制器的servlet和servlet映射。

創建servlet和servlet映射以處理您的請求。

web.xml中

    <servlet>
    <description>
    </description>
    <display-name>TestServ</display-name>
    <servlet-name>main</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/test/*</url-pattern>
</servlet-mapping>

創建與servlet關聯的spring配置文件。

在這種情況下,由於我的servlet名稱是test,它將是test-servlet.xml文件,該文件將進入根目錄下的WEB-INF文件夾。

<?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


<bean name="/registration/*" class="register.ResgisterController"/>

創建控制器類以映射您的請求。

package registration;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import registration.User;

@Controller
public final class RegistrationController {

    public RosterController() {

    }

    //Spring lets you You can access your spring mvc model from the controller automatically 
    @RequestMapping
    public void list(Model model) {
        //do something
    }


    //Extract a registration id from the request and you can use in your model
    @RequestMapping
    public void member(@RequestParam("registrationId") Integer id, Model model) {
        //do something
    }
}

您將不得不使用' MultiActionController ',但如果您將使用此控制器,則驗證移植會有一些復雜性。
解決類似問題的方法是@ http://www.scribd.com/doc/20156448/Multi-Action-Controller-With-Validation

您可以使用Spring webFlow並將控制器注釋為@controller

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM