警告信息如下:
警告: 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頁(yè)面配置信息(部分)
<s:form action="/myNameSpace/login.action">
思考:沒(méi)有在''的namespace中發(fā)現(xiàn)指定的action '/myNameSpace/login.action'
答疑:因?yàn)榕渲玫?/span>struts2標(biāo)簽并未指定namespace屬性。所以struts2會(huì)默認(rèn)從根命名空間"/"搜索action串' /myNameSpace/login.action',如果搜索不到將進(jìn)入默認(rèn)命名空間''搜索action請(qǐng)求串,在默認(rèn)命名空間中是肯定找不到我們 定義的action的,所以,struts2拋出一個(gè)警告信息。
但是為什么我們沒(méi)有填寫(xiě)namespace,我們的請(qǐng)求也可以正常訪問(wèn)呢?
我們來(lái)看一下解析后的html
查看源碼得到的html(部分)
<form id="login" onsubmit="return true;" action="/srvclink/myNameSpace/login.action" method="post">
我們看到form提交的action串是準(zhǔn)確的url請(qǐng)求,action串確實(shí)是/srvclin(應(yīng)用根)/myNameSpace(命名空間)/login.action。
命名空間中找不到action定義,并不意味著這個(gè)action真的不存在,只是我們的代碼有問(wèn)題而已。還有一點(diǎn)是我們?cè)?/span>jsp頁(yè)面的action請(qǐng)求中 手動(dòng)的加入了.action后綴。事實(shí)上struts2會(huì)自動(dòng)追加.action的,因?yàn)槲覀儾](méi)有合法的使用struts2的標(biāo)簽,所以struts2 這里并沒(méi)有給我們追加.action,解析后的代碼中存在的.action,完全是我們手動(dòng)在jsp頁(yè)面填寫(xiě)的,有疑問(wèn)的網(wǎng)友可以不手動(dòng)添加查看 html。
我們修改我們的程序代碼
jsp頁(yè)面配置信息(部分)修改后加入namespace屬性,修改action屬性值為/login.action
<s:form action="/login.action" namespace="/myNameSpace">
請(qǐng)求頁(yè)面后,大家很失望吧?警告依然存在。但是我們看一下警告信息。
警告信息:
警告: No configuration found for the specified action: '/login.action' in namespace: '/myNameSpace'. Form action defaulting to 'action' attribute's literal value.
沒(méi)有在'/myNameSpace'的namespace中發(fā)現(xiàn)指定的action '/login.action'
毫無(wú)疑問(wèn),這里的警告和第一次的警告信息截然不同。我們現(xiàn)在存在命名空間,'/myNameSpace'能夠被struts2檢索到,并不是開(kāi)始的''。那問(wèn)題的關(guān)鍵在哪里呢?
在namespace中沒(méi)有發(fā)現(xiàn)指定的action '/login.action' ???
我們來(lái)看一下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'的定義,并沒(méi)有所謂的'/login.action' 定義,所以struts2的警告并未錯(cuò)。如果大家對(duì)這個(gè)抱有懷疑,可以修改action的名字'login'為‘/longin.action’
<action name="/login.action" class="com.jato.srvclink.test.login.LoginAction" method="login">
請(qǐng)求頁(yè)面時(shí)你會(huì)發(fā)現(xiàn)不在報(bào)警告信息,原因很簡(jiǎn)單。因?yàn)樵诿臻g為'myNameSpace'下確實(shí)存在命名為'/login.action'的action。
我們?cè)俅涡薷呐渲梦募?/span>
jsp頁(yè)面配置信息(部分)修改后action屬性值為longin
<s:form action="login" namespace="/myNameSpace">
請(qǐng)求頁(yè)面時(shí),我們發(fā)現(xiàn)不再有警告信息了。
如果你有足夠細(xì)心,我想你應(yīng)該可以徹底的明白為什么struts2會(huì)報(bào)警了吧?你也應(yīng)該明白了使用struts2標(biāo)簽action中添加/線后請(qǐng)求反而報(bào)錯(cuò)的原因了。
posted on 2014-01-16 10:13
kelly 閱讀(257)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
java 框架