2012-11-05 65 views
2

我正在使用Spring 3.1.1.RELEASE。我正在將URL映射到控制器方法。我想將URL「/ my-context-path/organizations/add」映射到下面的控制器方法。在我的控制,我有如何將此URL映射到Spring控制器方法?

@Controller 
@RequestMapping("/organizations") 
public class OrganizationController 
{ 

    … 
    @RequestMapping(value = "/add", method = RequestMethod.GET) 
    public ModelAndView doGetadd() 
    { 
     … do some stuff … 
     return new ModelAndView("organizations/add"); 
    } // doGetadd 

在我的web.xml我有

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 

    <display-name>SB Admin</display-name> 

    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/organizations/*</url-pattern> 
    </servlet-mapping> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> 
    </context-param> 

,在我dispathcer-servlet.xml中我有

... 
<!-- Enable annotation driven controllers, validation etc... --> 
<mvc:annotation-driven /> 

<context:component-scan base-package="org.myco.subco" /> 

    <bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
      <property name="prefix"> 
        <value>/WEB-INF/views/</value> 
      </property> 
      <property name="suffix"> 
        <value>.jsp</value> 
      </property> 
    </bean> 

但請求我所需的環境下 - 路徑結果爲「DispatcherServlet中名爲'dispatcher」錯誤(使用JBoss 7)時,找不到URI中帶有URI [/myproject-1.0-SNAPSHOT/organizations/add]的HTTP請求的映射。我該如何正確映射這個東西?請注意,我在我的控制器中有多個方法,我想在「/ organizations」空間中使用不同的URL。

+0

試this..http://stackoverflow.com/questions/13184411/friendly-url-mapping-issues-java- spring – user533

+0

什麼是你提到的mycontext-path ...你的一些話讓我感到困惑...無論如何,Usha的回答可以幫助你很多,因爲刪除了url中的*,原因是如果你把*它還包括挑選意味着循環的調度員.. – user533

回答

2

試試這個。

更改調度servlet映射到:

<servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

而對於OrganizationController映射將

@Controller 
    @RequestMapping("/organizations") 
    public class OrganizationController 

而對於ContractsController的映射是理解後

@Controller 
    @RequestMapping("/contracts") 
    public class OrganizationController 
+0

工作的聖神!這麼簡單,但我一直在尋找那個。今天我正在爲你的總統投票。 – Dave

+0

很高興它工作!爲總統投票,如果你還沒有:) – Usha

+0

@Usha我期望這個答案有效... Congrats – user533

1

根據Spring Doc,ModelAndView構造函數參數是視圖文件的名稱。

因此,該文件可能是addView.jsp

除了一個事實,即你(至於我的春節知識去)實際上將其映射到/應用程序名稱/機構/組織/添加由於:

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/organizations/</url-pattern> 
</servlet-mapping> 

而且

@Controller 
@RequestMapping("/organizations") 
public class OrganizationController 

我建議改變從控制器requestmapping到

@Controller 
@RequestMapping("/") 
public class OrganizationController 

<url-pattern>/organizations/</url-pattern> basiccally定義您的網站將被訪問的'虛擬路徑'。 你在控制器上做的Al映射會附加到它,使它/organizations/whateverpagecomeshere.jsp

並確保View文件存在!

+0

我想確保我正確理解你。對於所有控制器,你建議我在「@Controller」註釋之前放置「@RequestMapping(」/「)」?我還有一個ContractsController,它的URL我想映射到「/ contracts/add」,「/ contracts/update」等等。你的建議是否適用於多個控制器? – Dave

+0

@Dave請注意,請通過以下方式通知您的回覆:-)這正是Usha提供的答案的另一種方式。我選擇讓您的上下文成爲/organizations/whateverpagecomeshere.derp,並且這樣,通過將@ @ RequestMapping分配給「/」,您實際上正在對/ organizations /進行授權。沒有在您的控制器中。這意味着對於你的第二個問題,你會注意到/organizations/contracts/add.extension。你可以在servlet映射中看到url模式的值嗎? – Daneo

相關問題