2014-03-12 80 views
3

我有一個包如何映射URL包含在行動(通配符映射)斜槓

/cabinet/s 

所有動作返回JSP片段。

和任何URL的路徑的此包下面

/cabinet/s/actionid/snippetgroup/filename.do 
  • actionid其餘 - 標識符的動作類
  • snippetgroup - 片段組的某些功能的標識符(這僅僅是一個目錄名)
  • 文件名 - JSP文件名
<action name="actionid/*/*" class="someclass"> 
    <result>/WEB-INF/jsp/{1}/{2}.jps</result> 
</action> 

問題在於Struts從不會調用正確的類。它總是錯誤,filename行動不存在。

將Struts應用程序配置爲使用.do擴展而不是.action

+0

'.do'呢?你有沒有配置S2將其作爲動作擴展使用?如果沒有,那麼你需要從網址中刪除它。 –

+0

@AleksandrM:將它添加到您的答案......這個交叉評論是模糊的;) –

+0

@AndreaLigios:是的。 :)回答你以前的問題:擴展處理髮生在解析名稱空間之前。所以我懷疑它可以用'.do'配合適當的配置。 –

回答

2

您必須設置在struts.xml中according to the documentation此選項:

<constant name="struts.enable.SlashesInActionNames" value="true"/> 
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> 

可能刪除.do擴展,通過將其設定爲空(或更好地逗號,防止Struts的handling static resources as namespaces):

<constant name="struts.action.extension" value=","/> 

否則,您可以通過使用正則表達式模式匹配器切換到Advanced Wildcards

+0

看起來像struts有很多常量。 – simar

+0

這是Struts的唯一兩個文檔告訴你修改以實現*參數後面的動作名稱* result :) –

+0

請保留.do擴展名前先試一下,然後來這裏發佈結果,我很想知道如果有效 –

2

爲了這個工作,你需要在你的配置中設置struts.enable.SlashesInActionNamestruestruts.mapper.alwaysSelectFullNamespacefalse

<constant name="struts.enable.SlashesInActionNames" value="true"/> 
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> 

而且你可能需要改變你的結果:

<result>/WEB-INF/jsp/{1}/{2}.jsp</result> 

也有你配置Struts2的使用.do作爲行動分機或不?如果沒有,那麼你需要從網址中刪除它。

+0

最初是絕對路徑不是相對的。我修正了它的問題。 – simar

+0

@simar你也應該贊同這個答案,因爲它說我的基本上是一樣的,它是同時發佈的......它是否與.do一起工作? –

0

問題是您使用指定包的相對路徑。但是你應該使用絕對路徑名。

<action name="actionid/*/*" class="someclass"> 
    <param name="snipetgroup">{1}</param> 
    <param name="filename">{2}</param> 
    <result>/WEB-INF/jsp/${snipetgroup}/${filename}.jsp</result> 
</action> 

該技術被稱爲Parameters after the action name。請注意,此功能自Struts 2.2.1起可用。應用後,您可以使用dynamic parameters in result

+0

。我修正了它的問題。我已經在struts文檔中看到了命名參數技術,但對於我來說,啓用SlashesInActionNames常量並不重要 – simar

+0

@simar如果您編輯問題以修復問題答案中的錯誤,下次您將最終自己解決你的問題。 –

+0

@simar我可能會忽略這條線對你而言並不重要,但是你是否遵循了這些鏈接,你是否閱讀過文檔。你知道所有禁止重複的答案,爲什麼你跟我說那句話很重要? –