No configuration found for the specified action: '/myNameSpa

今天花了點時間把struts2警告事件完全的測試了一邊,終於有點眉目了。但願能給其餘人帶來一點幫助。文章屬於原創。並不須要轉載的時候註明出處,而是但願轉載的朋友必定要看明白本文內容再轉載,由於我你都清楚,如今去google或百度獲得的解決方案多數是一致的,說俗點你們都是相互轉載的,這不是問題,問題是轉載的解決方案有時並非最理想的答案,簡單的說垃圾信息過多。這形成求知者大量的時間流失。但願轉貼者要對本身及網民負責。

警告信息:


警告: No configuration found for the specified action: '/myNameSpace/login.action' in namespace: ''. Form action defaulting to 'action' attribute's literal value.

struts.xml配置信息(部分)

<package name="packageName" extends="struts-default" namespace="/myNameSpace">
    <action name="login" class="com.jato.srvclink.test.login.LoginAction" method="login">

jsp頁面配置信息(部分)

<s:form action="/myNameSpace/login.action">

思考:沒有在''的namespace中發現指定的action '/myNameSpace/login.action'
答疑:由於配置的struts2標籤並未指定namespace屬性。因此struts2會默認從根命名空間"/"搜索action串'/myNameSpace/login.action',若是搜索不到將進入默認命名空間''搜索action請求串,在默認命名空間中是確定找不到咱們定義的action的,因此,struts2拋出一個警告信息。
可是爲何咱們沒有填寫namespace,咱們的請求也能夠正常訪問呢?

咱們來看一下解析後的html
查看源碼獲得的html(部分)

<form id="login" onsubmit="return true;" action="/srvclink/myNameSpace/login.action" method="post">

咱們看到form提交的action串是準確的url請求,action串確實是/srvclin(應用根)/myNameSpace(命名空間)/login.action。
命名空間中找不到action定義,並不意味着這個action真的不存在,只是咱們的代碼有問題而已。還有一點是咱們在jsp頁面的action請求中手動的加入了.action後綴。事實上struts2會自動追加.action的,由於咱們並無合法的使用struts2的標籤,因此struts2這裏並無給咱們追加.action,解析後的代碼中存在的.action,徹底是咱們手動在jsp頁面填寫的,有疑問的網友能夠不手動添加查看html。

咱們修改咱們的程序代碼

jsp頁面配置信息(部分)修改後加入namespace屬性,修改action屬性值爲/login.action

<s:form action="/login.action" namespace="/myNameSpace">

請求頁面後,你們很失望吧?警告依然存在。可是咱們看一下警告信息。

警告信息:

警告: No configuration found for the specified action: '/login.action' in namespace: '/myNameSpace'. Form action defaulting to 'action' attribute's literal value.

沒有在'/myNameSpace'的namespace中發現指定的action '/login.action'

毫無疑問,這裏的警告和第一次的警告信息大相徑庭。咱們如今存在命名空間,'/myNameSpace'可以被struts2檢索到,並非開始的''。那問題的關鍵在哪裏呢?
在namespace中沒有發現指定的action '/login.action' ???

咱們來看一下struts.xml中的配置:

struts.xml配置信息(部分)

<package name="packageName" extends="struts-default" namespace="/myNameSpace">
    <action name="login" class="com.jato.srvclink.test.login.LoginAction" method="login">

是的,咱們'/myNameSpace'命名空間下,只有action名字爲'login'的定義,並無所謂的 '/login.action' 定義,因此struts2的警告並未錯。若是你們對這個抱有懷疑,能夠修改action的名字'login'爲‘/longin.action’
<action name="/login.action" class="com.jato.srvclink.test.login.LoginAction" method="login">
請求頁面時你會發現不在報警告信息,緣由很簡單。由於在命名空間爲'myNameSpace'下確實存在命名爲'/login.action'的action。

咱們再次修改配置文件

jsp頁面配置信息(部分)修改後action屬性值爲longin

<s:form action="login" namespace="/myNameSpace">

請求頁面時,咱們發現再也不有警告信息了。

若是你有足夠細心,我想你應該能夠完全的明白爲何struts2會報警了吧?你也應該明白了使用struts2標籤action中添加/線後請求反而報錯的緣由了。html

相關文章
相關標籤/搜索