2016-04-06 30 views
1

我是Struts框架的noob。我正在嘗試瞭解動作映射如何正確工作。假設我有一個發送AJAX請求的JavaScript文件:Struts struts-config.xml動作映射解釋

$("button").click(function(){ 
    $.ajax({url: "myTestUrl.do", success: function(result){ 
     //do something with result 
    }); 
}); 

和我struts-config.xml文件看起來像這樣:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> 
<struts-config> 
    <form-beans> 
     <form-bean name="testForm" type="com.test.TestForm"/>  
    </form-beans> 

    <!-- Global Forwards -->  
    <global-forwards> 
    </global-forwards> 

    <!-- Action Mappings --> 
    <action-mappings> 

     <action path="/myTestUrl" 
       type="com.test.TestAction" 
       name="testForm" 
       scope="request" /> 

    </action-mappings> 
    <controller locale="true"/> 
</struts-config> 

我不明白的動作和形式豆之間的關係。我的請求是否會由TestAction處理?如果是這樣,表單bean type屬性的目的是什麼?

UPDATE: 的人誰需要支柱MCV框架的一個很好的概述看看這個鏈接:http://www.javaranch.com/journal/2002/03/newslettermar2002.jsp#struts

+1

這是S1 - > * struts-config_1_1.dtd *。 –

+0

謝謝。我已經更新了這個問題。 – tommyO

回答

1

的關係由在動作配置的name屬性進行了。因此,如果您使用name="testForm",那麼名稱爲testForm的表單bean將被注入到該動作的執行方法中。

如果相對url與動作配置中的路徑值匹配,並且您已將操作servlet映射到servlet映射模式的*.do,則可能會處理您的請求。

<form-bean>type屬性用於輸入bean類的FQCN,該類可能會擴展ActionForm。 Struts需要能夠在需要時實例化bean。

+0

閱讀我上面編輯過的文章後,你的回答對我來說很有意義。據我所知,如果action標籤的'validate'屬性設置爲true,那麼bean將在Action類之前由Struts控制。如果在表單驗證過程中發現錯誤,那麼bean將返回一個ActionErrors對象。這應該轉發action標籤的'input'屬性中的任何視圖。但是,如果沒有發現表單驗證錯誤,則Action類將被賦予控制權。 ...聽起來正確嗎? – tommyO

+1

沒錯。但你的問題不是關於驗證。如果你有另一個問題,你應該問一個新的問題。 –