2011-02-02 105 views
1

這裏是我的控制器的方法之一,如何捕捉和處理org.springframework.web.portlet.bind.MissingPortletRequestParameterException

@ResourceMapping(value="petPortalAction") 
    @RequestMapping(params={"transactionType=BUY_PET"}) 
    public String handlePetPurchaseAction(
        @RequestParam(required=true, value="petId") String petId, 
        PortletRequest request, 
        Model model) 
    { 
    ... 
    } 

正如你所看到的,參數petId是必需的請求參數。 如果從請求中缺少,則會引發org.springframework.web.portlet.bind.MissingPortletRequestParameterException。

我的問題是如何捕捉和處理這個異常......春天有沒有我可以使用的監聽器?

在此先感謝。

回答

3

這個問題有點舊,但我有同樣的問題(這個問題在Google上出現得相當高;-))。因此,這裏是我做過什麼: 我加入了follwing到我的applicationContext.xml:

<bean id="defaultExceptionHandlerTemplate" class="org.springframework.web.portlet.handler.SimpleMappingExceptionResolver" abstract="true"> 
    <property name="defaultErrorView" value="error/error-exception-default" /> 
    <property name="exceptionMappings"> 
     <props> 
      <prop key="org.springframework.web.portlet.bind.MissingPortletRequestParameterException"> 
       error/error-missing-parameter 
      </prop> 
     </props> 
    </property> 
</bean> 

<bean id="defaultExceptionHandler" parent="defaultExceptionHandlerTemplate" /> 

錯誤/錯誤缺少參數是一個觀點,即是要顯示的名稱。 Spring會自動將異常發佈到視圖中,默認情況下調用變量「exception」。在一個典型的JSP設置中,根據您的視圖解析器配置,我將視圖錯誤/錯誤缺失參數映射到/WEB-INF/jsp/error/error-missing-parameter.jsp。該文件可以例如簡單地是這樣的:

<jsp:root version="2.0" 
    xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:c="urn:jsptld:http://java.sun.com/jsp/jstl/core"> 

    <h1>Missing parameter</h1> 
    <p>Error: The parameter '<c:out value="${exception.parameterName}" />' of type '<c:out value="${exception.parameterType}" />' is missing.</p> 
</jsp:root> 

屬性「defaultErrorView」映射到一個視圖中的情況下沒有在下面的比賽中exceptionMappings的。如果你不需要這個,你可以跳過這個屬性。